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.