我知道这可能是一个愚蠢的问题,但是我已经花费了两天的时间在谷歌上搜索,没有任何结果。 允许用户只输入 Cyrillic 字符和空格的正则表达式模式应该是什么? 提前感谢您!
我知道这可能是一个愚蠢的问题,但是我已经花费了两天的时间在谷歌上搜索,没有任何结果。 允许用户只输入 Cyrillic 字符和空格的正则表达式模式应该是什么? 提前感谢您!
\p{Script=Cyrillic}
属性,但缺少\p{Block=Cyrillic}
属性。它们位于不同的块中。看:$ unichars '\p{Script=Cyrillic}' '\P{Block=Cyrillic}' | wc -l
150
此外,在Cyrillic块中还有一些非Cyrillic代码点。
你能做的最好的事情是将所有404个Cyrillic代码点列举为字符类,但这可能会变得难以实现。
$ unichars '\p{Script=Cyrillic}' | wc -l
404
[\s\p{IsCyrillic}]
,因为\p{IsCyrillic}
应该是\p{Script=Cyrillic}
的别名。还有其他几种可能的语言,但基本上你必须支持Unicode脚本属性才能使其正常工作。顺便说一句,你可能还想通过\p{IsCommon}
允许任何脚本类型的字符。这些是常规标点符号和空格等。我提到的uniprops脚本可以列出所有代码点的属性。 - tchristpreg
模式在 PHP 中的工作方式后,发现如果 PHP 链接的 PCRE 库已经构建/编译为支持 Unicode(这取决于站点),那么 PCRE 和 PHP 将使用脚本属性的快捷别名,因此 \p{Cyrillic}
是表示 \p{Script=Cyrillic}
的方法。您还可以使用 Perl 5.6 或更高版本、Ruby 1.9 或更高版本或 Java 1.7 或更高版本来访问脚本属性。注意:不能使用 C♯,因为它的 \p{Cyrillic}
是恶意的 \p{Block=Cyrillic}
而不是 \p{Script=Cyrillic}
。 - tchrist有一个小技巧可以让这个工作(不过它的准确性并不是很可靠,因此在使用之前请仔细检查):
`/^[\u0400-\u04FF\s]+$/`
(/^[\u0400-\u04FF\s]+$/).test("Привет мир") //true
虽然我不太确定 Unicode 的支持情况,但根据维基百科的说法,西里尔字母范围内的字符通常位于(U+0400-U+04FF)之间,而此正则表达式还包括空格,这段代码在我的浏览器控制台中可以运行。
\p{Nd}
、数字\pN
、数学符号\p{Math}
、字母\pL
、字母表\p{Alphabetic}
或者尤其是只包含一个或两个脚本或类型为Common的字符是合理的。这可以避免一些安全陷阱,例如B≢Β≢В(即U+0042拉丁大写字母B与U+0392希腊大写字母BETA和U+0412西里尔大写字母VE)。然而,有些情况是棘手的。 - tchrist