为了锁定电子邮件安全系统,我发现了一条规则,该规则声称阻止具有任何连续的4个非拉丁字符的电子邮件,
[^[:ascii:]\p{Latin}\pCc\pCf\pM\pZ\pP\pS]{4}.
我玩过任何正则表达式都已经有几年了,但我想我记得很不错。
我的问题和困惑是,为什么使用Unicode通用类别代码? Ive找到了一个不错的列表here,但是在帮助理解它们各自的用途方面并不是很出色。
感谢您提供的任何帮助。
答案 0 :(得分:0)
请在下面找到说明:
[^->匹配列表中不存在的单个字符
[:ascii:]->任何有效的ascii字符
\ p {Latin}->匹配拉丁脚本中的任何字符
\ pC->匹配不可见的控制字符和未使用的代码点
c->匹配文字字符c
\ pC->已经解释
f->匹配文字字符f
\ pM->匹配要与另一个字符组合的字符 字符
\ pZ->匹配任何类型的空格或不可见的分隔符
\ pP->匹配任何标点符号
\ pS->匹配任何数学符号,货币符号,装饰符号等。
{4}->恰好出现4个先前的范围
答案 1 :(得分:0)
我认为我能说得比来源更好:Unicode®Standard Annex#44 UNICODE CHARACTER DATABASE General Category Values:
代码点的General_Category属性为该代码点提供了最一般的分类。通常根据该代码点分配的字符的主要特征来确定它。例如,字符是字母,标记,数字,标点符号还是符号?如果是,则是什么类型?
...
许多字符有多种用途,并且不是所有此类情况都可以通过General_Category值完全捕获。 …General_Category只是字符的一阶,最常见的分类。
关于出于安全考虑为何使用它们的情况,对于使用拉丁文字的读者来说,这似乎是一种避免Unicode Confusables的方法。
易混淆的字符是那些可能与其他字符混淆的字符(在某些常见的UI字体中),例如拉丁字母“ o”和希腊字母omicron“ο”。字体会有所不同:例如,希伯来语字符“ He”在某些字体(例如Arial希伯来语)中看起来与“ o”相似,令人困惑。
例如,可以构建超链接以将读者带到该读者不愿意去的网站。