验证阿拉伯语和英语字符的组合


Validate a combination of Arabic and English characters

我想验证一个字符串,其中每个字母应该是阿拉伯语或英语字母或符号'-.ـ或空格之一。

我得到的第一个regix是

/^(['u0600-'u06ff'u0750-'u077f'ufb50-'ufc3f'ufe70-'ufefca-zA-Z'- .ـ]+)$/

JS有效,但对pcre(php)无效。所以我尝试了另一种解决方案来避免验证中的'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,这是为什么?

PHP正则表达式中的Unicode块本身不足以匹配Unicode字符串。

您需要一个/u修饰符来强制PHP使用Unicode匹配。

u (PCRE_UTF8)
这个修饰符打开与Perl不兼容的PCRE的附加功能。模式和主题字符串被视为UTF-8。此修饰符在Unix上的PHP 4.1.0或更高版本以及在win32上的PHP 4.2.3中可用。从PHP 4.3.5开始,检查模式和主题的UTF-8有效性。无效的主题将导致preg_*函数不匹配;无效的模式将触发级别为E_WARNING的错误。自PHP 5.3.4以来,五个和六个八位字节的UTF-8序列被认为是无效的。(2007-08-28);

:

if ( preg_match('/^['p{Arabic}a-zA-Z'- .ـ]+$/u', "engعربlisي هنا.hـ") )
//                                          ^^
  die("T");
else
  die("F");

输出T .

参见IDEONE demo