Javascript正则表达式西里尔模式
我知道这是一个愚蠢的问题,但我花了两天时间在谷歌上搜索,没有任何结果。 什么样的regExp模式应该允许我的用户只键入西里尔字母和空格?Javascript正则表达式西里尔模式,javascript,regex,unicode,Javascript,Regex,Unicode,我知道这是一个愚蠢的问题,但我花了两天时间在谷歌上搜索,没有任何结果。 什么样的regExp模式应该允许我的用户只键入西里尔字母和空格? 提前谢谢 在Javascript中无法做到这一点,因为Javascript在其正则表达式中甚至不提供最基本的规则。您必须切换语言才能正确执行此操作 不能为此使用枚举块范围。这混淆了块和脚本,这是有严重缺陷的。有150个代码点具有\p{Script=Cyrillic}属性,但缺少\p{Block=Cyrillic}属性。他们在不同的街区。观察: $ unicha
提前谢谢 在Javascript中无法做到这一点,因为Javascript在其正则表达式中甚至不提供最基本的规则。您必须切换语言才能正确执行此操作 不能为此使用枚举块范围。这混淆了块和脚本,这是有严重缺陷的。有150个代码点具有
\p{Script=Cyrillic}
属性,但缺少\p{Block=Cyrillic}
属性。他们在不同的街区。观察:
$ unichars '\p{Script=Cyrillic}' '\P{Block=Cyrillic}' | wc -l
150
此外,在西里尔字母块中还有几个非西里尔字母代码点
最好是将所有404个西里尔文代码点作为一个字符类枚举,这可能会被证明是非常大的
$ unichars '\p{Script=Cyrillic}' | wc -l
404
如果你真的想,你可以使用列出所有这些。您可能还想在那里抓取。好吧。我如何用php测试它。我将尝试使用ajax。@Emil:我相信如果您使用PHP的preg(“perl regex”)函数,您应该能够使用像
[\s\p{iscrylic}]
这样的字符类,因为\p{iscrylic}
应该是\p{Script=Cyrillic}
的别名。还有其他几种可能的语言,但基本上您必须支持Unicode脚本属性才能正常工作。顺便说一句,您可能还希望通过\p{IsCommon}
允许任何脚本类型的公共字符。这些是常规的标点符号,包括空格。我提到的uniprops脚本可以列出一个代码点的所有属性。@Emil:在阅读pcrepattern手册页以了解preg
模式在PHP中应该如何工作时,看起来PHP所链接的PCRE库是使用Unicode支持构建/编译的(这取决于站点),然后PCRE和PHP使用快捷别名作为脚本属性,因此它的\p{Cyrillic}
就是您表达\p{script=Cyrillic}
的方式。您还可以使用Perl5.6或更高版本、Ruby1.9或更高版本、Java1.7或更高版本访问脚本属性。小心:你不能用C♯ ’因为它的\p{Cyrillic}
是邪恶的\p{Block=Cyrillic}
而不是\p{Script=Cyrillic}
完成了$pattrn=“/[\sббббббббббббббб`@埃米尔:我不知道你脑子里有特定的西里尔文字!有没有理由限制你的用户使用某些字符?@Matti:这是个很好的问题。通常情况下,您不希望这样做,但有时将输入字段限制为仅十进制数字\p{Nd}
,或仅限数字\pN
,或仅限数学数字\p{math}
,或仅限字母\pL
,或仅限字母\p{alphatic}
,或者,尤其是只有一个或两个脚本或公共类型的字符。这避免了一些安全隐患,如B≢Β≢B(即U+0042拉丁文大写字母B对U+0392希腊文大写字母BETA对U+0412西里尔文大写字母VE)。不过,有些问题很棘手。