我想验证一个字符串,其中每个字母应该是一个阿拉伯字母或英语字母或符号之一\-.ـ
或一个空格。
我来的第一个地方是
/^([\u0600-\u06ff\u0750-\u077f\ufb50-\ufc3f\ufe70-\ufefca-zA-Z\- .ـ]+)$/
它在JS
中运行得很好,但与pcre(php)
validation.So没有关系,我尝试了另一种解决方案,以避免在验证中使用\u
。
/^[\p{Arabic}a-zA-Z\- .ـ]+$/
这个正则表达式没有给我任何错误,并且精确地运行了如我所需。
但是PHP
没有,我在php中测试了相同的文本
if ( preg_match('/^[\p{Arabic}a-zA-Z\- .ـ]+$/', "engعربlisي هنا.hـ") )
die("T");
else
die("F");
代码的结果是F
而不是T
,为什么呢?
发布于 2015-08-05 23:09:04
PHP正则表达式中的Unicode块本身不足以匹配Unicode字符串。
您需要一个修饰符来强制PHP使用Unicode匹配。
u (PCRE_UTF8) 此修饰符打开与Perl不兼容的PCRE的附加功能。模式和主题字符串被视为UTF-8.这个修饰符在Unix上可以从PHP4.1.0或更高版本获得,在win32上可以从PHP4.2.3获得。从PHP4.3.5开始检查该模式和主题的有效性。无效的主题将导致
preg_*
函数不匹配;无效的模式将触发级别E_WARNING的错误。五个和六个八进制UTF-8序列被认为是无效的,因为PHP 5.3.4 (resp )。PCRE 7.3 2007-08-28);以前被视为有效的UTF-8。
因此:
if ( preg_match('/^[\p{Arabic}a-zA-Z\- .ـ]+$/u', "engعربlisي هنا.hـ") )
// ^^
die("T");
else
die("F");
输出T
。
请参阅IDEONE演示
https://stackoverflow.com/questions/31844238
复制相似问题