多语言数字字符算作字母吗?

时间:2013-01-11 09:45:15

标签: php regex utf-8

我正在尝试在其他语言中搜索字母和空格(简单单词),如果我找到数字或标点符号,则抛出检测异常。在测试正则表达式时,我用维基百科上的UTF-8数字字符编写,我的结果总是回来一个匹配,我很困惑为什么除非它认为所有数字都被认为是字母。

这是我尝试过的角色:

5或伍 http://en.wikipedia.org/wiki/Chinese_numerals

5或Є http://en.wikipedia.org/wiki/Cyrillic_script

以下是代码:

$were_bad_characters_found = preg_match('/[^\p{L}\p{Zs}]+/us',  $data); 

它问的问题的答案总是,不,没有发现坏字符。

根据文档的说法,这似乎有用,而且当我尝试通过它运行简单的英文数字时它确实起作用,但是一旦多语言字符出现,它就会在我身上滚动。我有很多变种用于检测不同的常见场景,所有utf8正则表达式代码似乎只适用于英文字符。想法?

1 个答案:

答案 0 :(得分:0)

您展示的字符字母。

  • U+4F0D 伍,不是数字,并且有非数字解释。

  • U+0404 Є不是数字,但也不接近任何数字解释。

properties of english digits in unicode将其设为数字​​,而不是字母。在PHP中,您可以使用\p{Nd}来匹配数字。但你的正则表达式正常。