首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >验证阿拉伯语和英语字符的组合

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

Stack Overflow用户
提问于 2015-08-05 23:03:37
回答 1查看 1.7K关注 0票数 1

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

我来的第一个地方是

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

它在JS中运行得很好,但与pcre(php) validation.So没有关系,我尝试了另一种解决方案,以避免在验证中使用\u

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

这个正则表达式没有给我任何错误,并且精确地运行了如我所需

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

代码语言:javascript
运行
复制
if ( preg_match('/^[\p{Arabic}a-zA-Z\- .ـ]+$/', "engعربlisي هنا.hـ") )
      die("T");
else
      die("F");

代码的结果是F而不是T,为什么呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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。

因此:

代码语言:javascript
运行
复制
if ( preg_match('/^[\p{Arabic}a-zA-Z\- .ـ]+$/u', "engعربlisي هنا.hـ") )
//                                          ^^
  die("T");
else
  die("F");

输出T

请参阅IDEONE演示

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31844238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档