Regex для обнаружения нелатинских символов - PullRequest
0 голосов
/ 05 июля 2018

Стремясь заблокировать систему безопасности электронной почты, я нашел это правило, которое утверждает, что блокирует электронную почту любыми 4 последовательными нелатинскими символами,

[^[:ascii:]\p{Latin}\pCc\pCf\pM\pZ\pP\pS]{4}.

Прошло несколько лет с тех пор, как я играл с любым регулярным выражением, но мне нравится думать, что я помню приличную сумму.

Мой вопрос и путаница: зачем использовать коды общей категории Unicode? Я нашел приличный список здесь , но он не очень хорошо помогает понять, для чего будет использоваться каждый из них.

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

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Не думаю, что могу сказать это лучше, чем источник: Стандартное приложение Unicode® № 44 UNICODE CHARACTER DATABASE Значения общей категории :

Свойство General_Category кодовой точки обеспечивает наиболее общую классификацию этой кодовой точки. Обычно он определяется на основе основной характеристики назначенного символа для этой кодовой точки. Например, является ли символ буквой, знаком, цифрой, пунктуацией или символом и, если да, какого типа?

...

Многие символы имеют многократное использование, и не все такие случаи могут быть полностью зафиксированы значением General_Category. … General_Category - это просто самая обычная категоризация символа первого порядка.

Относительно того, почему их используют в случае проблем с безопасностью, кажется, что это способ избежать Unicode Confusables для читателей, которые используют латинские скрипты.

Смежные символы - это те, которые могут быть перепутаны с другими (в некоторых распространенных шрифтах пользовательского интерфейса), такими как латинская буква «о» и греческая буква omicron «о». Шрифты имеют значение: например, ивритский символ «ס» в некоторых шрифтах выглядит смущающе похожим на «o» (например, Arial Hebrew)

Например, можно создать гиперссылку, чтобы привести читателей на веб-сайт, на который читатель в противном случае не захотел бы пойти.

0 голосов
/ 05 июля 2018

Пожалуйста, найдите объяснение ниже:

[^ -> Соответствует одному символу, отсутствующему в списке

[: ascii:] -> любой действительный символ ascii

\ p {Latin} -> соответствует любому символу латинского алфавита

\ pC -> сопоставляет невидимые управляющие символы и неиспользуемые кодовые точки

c -> соответствует буквенному символу c

\ pC -> Уже объяснено

f -> соответствует буквальному символу f

\ pM -> соответствует символу, предназначенному для объединения с другим символ

\ pZ -> соответствует любому виду пробела или невидимого разделителя

\ pP -> соответствует любому знаку пунктуации

\ pS -> соответствует любым математическим символам, знакам валюты, дингбатам и т. Д.

{4} -> Точное вхождение 4 предыдущего диапазона

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...