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

时间:2015-08-05 23:03:37

标签: php regex validation

我想验证一个字符串,其中每个字母应为阿拉伯字母或英文字母或其中一个符号\-.ـ或空格。

我带来的第一个regix是

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

哪个适用于JS,但没有pcre(php)验证。所以我尝试了另一个解决方案来避免验证中的\u

/^[\p{Arabic}a-zA-Z\- .ـ]+$/

这个正则表达式没有给我任何错误,并且正好as I need

但是PHP没有,我在php中测试了相同的文本

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

代码的结果是F而不是T,为什么会这样?

1 个答案:

答案 0 :(得分:1)

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

您需要/u modifier来实际强制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序列被视为无效(分别为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 demo