Регекс, кожен не буквено-цифровий символ, за винятком пробілу чи товстої кишки


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), і виключає безліч дійсних наголошених символів із незахідних мов, таких як польська, чеська, в'єтнамська тощо.
триплечі

1
Запропоновано для опису кожної частини RegEx.
morajabi

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 та Перейдіть, щоб назвати декілька.

Це не працює для 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).
трійка

1
Я видалю Python з відповіді, я думав, що перевірив це, але, мабуть, ні. Дякуємо, що вказали на це.
Ste

0

Спробуйте додати це:

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

Це працювало для мене ... :)


Це , здається , повторити прийнятий відповідь з 2011 роком ^і $якорями меж його , щоб відповідати цілим рядках і *кванторного кошти він також відповідає порожнім рядкам.
трійка

0

У JavaScript:

/[^\w_]/g

^заперечення, тобто виберіть щось, що не є в наступному наборі

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

_ заперечуйте підкреслення, оскільки це вважається символом "слова"

Приклад використання - const nonAlphaNumericChars = /[^\w_]/g;

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.