Regex, каждый не алфавитно-цифровой символ, кроме пробела или двоеточия

131

Как я могу сделать это где-нибудь?

По сути, я пытаюсь сопоставить всевозможные разные символы, такие как амперсанды, точки с запятой, знаки доллара и т. Д.

Райан Уорд
источник
13
/[^a-zA-Z0-9\s\:]*/
Келли

Ответы:

246
[^a-zA-Z\d\s:]
  • \ d - числовой класс
  • \ s - пробел
  • a-zA-Z - соответствует всем буквам
  • ^ - отрицает их все - так вы получите - не числовые символы, не пробелы и не двоеточия
Тудор Константин
источник
Это то, на что я также смотрю :)) - Я должен рекламировать ваш идеальный ответ
Тудор Константин
7
Единственное, что я обнаружил, это то, что при этом удаляются специальные символы, такие как é или ã. Я бы предпочел [^ \ w \ d \ s:].
Эрик Белэйр
5
Понижено, потому что это не поймает не латинские символы, ни "специальные" латинские символы.
Дамиан
\dи \sявляются расширениями Perl , которые , как правило , не поддерживаются старыми инструментами нравится grep, sed, tr, lexи т.д.
tripleee
38

Это должно сделать это:

[^a-zA-Z\d\s:]
Люк Снерингер
источник
1
Остальные либо проверяют пространство, но не пробелы, либо имеют отрицание в неправильном месте, чтобы фактически отрицать.
Захари Скотт
\ w ловит также подчеркивания - это не алфавитно-цифровой символ
Тудор Константин
Ага! Я изменю - я не знал этого. Я ожидаю, что он работает по-разному для разных двигателей, но может также дать ОП безопасный ответ.
Люк Снирингер
2
Понижено, потому что это не поймает не латинские символы, ни "специальные" латинские символы.
Дамиан
16

Если вы хотите использовать символы латинского акцентирования (например, à Ñ) как обычные буквы (т.е. избегать их совпадения), вам также необходимо включить соответствующий диапазон Unicode ( \ u00C0- \ u00FF ) в свое регулярное выражение, поэтому будет выглядеть так:

/[^a-zA-Z\d\s:\u00C0-\u00FF]/g
  • ^ отрицает то, что следует
  • a-zA-Z соответствует заглавным и строчным буквам
  • \d соответствует цифрам
  • \s соответствует пустому пространству (если вы хотите сопоставить только пробелы, замените его пробелом)
  • : соответствует двоеточию
  • \u00C0-\u00FF соответствует диапазону Unicode для латинских символов с ударением.

в северном направлении Сопоставление диапазона Unicode может не работать для всех механизмов регулярных выражений, но вышеперечисленное, безусловно, работает в Javascript (как показано на этого пера на Codepen).

nb2. Если вас не беспокоит сопоставление подчеркивания, вы можете заменить его a-zA-Z\dна \wсовпадение букв, цифр и подчеркивания.

Ник Ф
источник
Этот диапазон содержит некоторые символы, которые не являются буквенно-цифровыми (U + 00D7 и U + 00F7), и исключает множество допустимых символов с ударением из незападных языков, таких как польский, чешский, вьетнамский и т. Д.
tripleee
1
Проголосовал за описание каждой части RegEx.
Мораджаби
14

Попробуй это:

[^a-zA-Z0-9 :]

Пример JavaScript:

"!@#$%* ABC def:123".replace(/[^a-zA-Z0-9 :]/g, ".")

Смотрите онлайн пример:

http://jsfiddle.net/vhMy8/

Topera
источник
3
Понижено, потому что это не поймает не латинские символы, ни "специальные" латинские символы.
Дамиан
14
Легко проголосовать за ответ, но еще труднее предоставить конструктивную информацию доске, например, как можно поймать нелатинские символы или «специальные» латинские символы? По моим подсчетам, здесь вы проголосовали за 3 ответа по той же причине, и, на мой взгляд, за небольшую поправку. Например, я здесь, чтобы найти регулярное выражение именно для того, что обсуждается в этих ответах. Меня не волнуют наборы символов, которые не будут использоваться в моем приложении. Закон убывающей доходности.
Аарон может быть «незначительным изменением» для гражданина США, но весьма актуален для ... остальной части этой планеты.
Майкл К. Боррегор
4

Никаких буквенно-цифровых символов, пробелов или '_'.

var reg = /[^\w\s)]|[_]/g;
Василий Гутник
источник
4

Если вы имеете в виду «не буквенно-цифровые символы», попробуйте использовать это:

var reg =/[^a-zA-Z0-9]/g      //[^abc]
Ким-Чинь
источник
1

Это регулярное выражение работает для C # , PCRE и Go, чтобы назвать несколько.

Это не работает для JavaScript на Chrome, как говорит RegexBuddy . Но здесь уже есть пример для этого.

Это основная часть этого:

\p{L}

который представляет собой \p{L}или \p{Letter}любой вид письма с любого языка.


Само полное регулярное выражение: [^\w\d\s:\p{L}]

Пример: https://regex101.com/r/K59PrA/2

Ste
источник
Это единственный ответ, который правильно относится к алфавиту с акцентом на Unicode. К сожалению, не все движки регулярных выражений поддерживают это средство (даже в Python его нет, начиная с 3.8, хотя его движок регулярных выражений якобы основан на PCRE).
tripleee
1
Я удалю Python из ответа, я думал, что проверил это, но, видимо, нет. Спасибо что подметил это.
Ste
0

Попробуйте добавить это:

^[^a-zA-Z\d\s:]*$

Это сработало для меня ... :)

Эр Парту
источник
Это , кажется , повторить принятый ответ с 2011 годом ^и $якорями пределов его , чтобы соответствовать целым строкам и *кванторным средства он также соответствует пустым строкам.
tripleee
0

В JavaScript:

/[^\w_]/g

^отрицание, т.е. выберите что-либо не в следующем наборе

\w любой символ слова (т. е. любой буквенно-цифровой символ плюс знак подчеркивания)

_ отрицание подчеркивания, так как оно считается символом «слово»

Пример использования - const nonAlphaNumericChars = /[^\w_]/g;

Крис Хэлкроу
источник