Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript正则表达式西里尔模式_Javascript_Regex_Unicode - Fatal编程技术网

Javascript正则表达式西里尔模式

Javascript正则表达式西里尔模式,javascript,regex,unicode,Javascript,Regex,Unicode,我知道这是一个愚蠢的问题,但我花了两天时间在谷歌上搜索,没有任何结果。 什么样的regExp模式应该允许我的用户只键入西里尔字母和空格? 提前谢谢 在Javascript中无法做到这一点,因为Javascript在其正则表达式中甚至不提供最基本的规则。您必须切换语言才能正确执行此操作 不能为此使用枚举块范围。这混淆了块和脚本,这是有严重缺陷的。有150个代码点具有\p{Script=Cyrillic}属性,但缺少\p{Block=Cyrillic}属性。他们在不同的街区。观察: $ unicha

我知道这是一个愚蠢的问题,但我花了两天时间在谷歌上搜索,没有任何结果。 什么样的regExp模式应该允许我的用户只键入西里尔字母和空格?
提前谢谢

在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)。不过,有些问题很棘手。