Я использую это регулярное выражение для слова, состоящего только из специальных символов

(?m)^[._^%*&$#!~@,-]+$

У нас есть что-то вроде \p{L} только для специальных символов?

Благодарность!

1
Qworel 22 Июн 2017 в 18:42
Я думаю, что лучшее, что вы получите, это \W, что является сокращением для "не словесного символа" (эквивалент [^a-zA-Z0-9_]), но он будет соответствовать большему количеству, чем то, что в настоящее время в вашем списке
 – 
Crayon Violent
22 Июн 2017 в 18:45
@CrayonViolent, спасибо. Это была моя первая мысль, но мне было интересно найти более «элегантный» способ решить эту проблему.
 – 
Qworel
22 Июн 2017 в 18:49
docs.microsoft.com/en-us/dotnet/standard/base-types/… предлагает набор параметров для категорий Unicode, по которым вы можете выбирать. Я понятия не имею о поддержке вне .NET - я знаю, что разные места реализуют регулярные выражения немного по-разному с точки зрения того, что они поддерживают, поэтому я предлагаю это только в качестве возможно полезного справочника. Вам решать, соответствует ли то, что вы считаете «только специальными символами» одной из этих категорий (например, все знаки препинания?).
 – 
Chris
22 Июн 2017 в 18:49
Можно попробовать отрицательный прогноз: (?:(?!\p{L}).)+
 – 
Crayon Violent
22 Июн 2017 в 18:52
1
Что не так в том, как вы это написали?
 – 
dawg
23 Июн 2017 в 18:43

1 ответ

Лучший ответ

Это должно получить все специальные символы ascii (?=[\x{21}-\x{7e}])[\W_]

32 символа

!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

Жестко запрограммировано в другом синтаксисе:

[!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~]  
[\x{21}-\x{2F}\x{3A}-\x{40}\x{5B}-\x{60}\x{7B}-\x{7E}]  
[\u{21}-\u{2F}\u{3A}-\u{40}\u{5B}-\u{60}\u{7B}-\u{7E}]  
[\u0021-\u002F\u003A-\u0040\u005B-\u0060\u007B-\u007E]  

_____________________

То же, что и выше, но без escape-символа (?=[\x{21}-\x{5b}\x{5d}-\x{7e}])[\W_]

31 символ

!"#$%&'()*+,-./:;<=>?@[]^_`{|}~

Жестко запрограммировано в другом синтаксисе:

[!"#$%&'()*+,\-./:;<=>?@[\]^_`{|}~]
[\x{21}-\x{2F}\x{3A}-\x{40}\x{5B}\x{5D}-\x{60}\x{7B}-\x{7E}]
[\u{21}-\u{2F}\u{3A}-\u{40}\u{5B}\u{5D}-\u{60}\u{7B}-\u{7E}]
[\u0021-\u002F\u003A-\u0040\u005B\u005D-\u0060\u007B-\u007E]
2
27 Июн 2017 в 00:04
Полное регулярное выражение Unicode для всех диапазонов довольно велико. Если нужно, я могу попробовать это для вас. И нет категории свойства специальных символов. Это нужно вывести. Однако обычно для паролей диапазон выше ascii не допускается.
 – 
user557597
22 Июн 2017 в 19:08
Спасибо. Похоже на то, что я искал.
 – 
Qworel
23 Июн 2017 в 10:15