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/


3
Понижено, потому что это не поймает не латинские символы, ни "специальные" латинские символы.
Дамиан

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

Аарон может быть «незначительным изменением» для гражданина США, но весьма актуален для ... остальной части этой планеты.
Майкл К. Боррегор


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


Это единственный ответ, который правильно относится к алфавиту с акцентом на 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;

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.