Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正则表达式以匹配阿拉伯语或英语名称_Php_Regex_Arabic - Fatal编程技术网

Php 正则表达式以匹配阿拉伯语或英语名称

Php 正则表达式以匹配阿拉伯语或英语名称,php,regex,arabic,Php,Regex,Arabic,我想要一个正则表达式,可以匹配阿拉伯语或英语名称,只允许字符(字母表)和空格,我找到了一个JavaScript正则表达式来完成这项工作 var regex = /^(?:[a-zA-Z\s\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF\uFB50-\uFDCF\uFDF0-\uFDFF\uFE70-\uFEFF]|(?:\uD802[\uDE60-\uDE9F]|\uD83B[\uDE00-\uDEFF])){0,30}$/; 我将其转换为符合PCRE的as /

我想要一个正则表达式,可以匹配阿拉伯语或英语名称,只允许字符(字母表)和空格,我找到了一个JavaScript正则表达式来完成这项工作

var regex = /^(?:[a-zA-Z\s\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF\uFB50-\uFDCF\uFDF0-\uFDFF\uFE70-\uFEFF]|(?:\uD802[\uDE60-\uDE9F]|\uD83B[\uDE00-\uDEFF])){0,30}$/;
我将其转换为符合PCRE的as

/^(?:[a-zA-Z\s\x{600}-\x{6FF}\x{750}-\x{77F}\x{8A0}-\x{8FF}\x{FB50}-\x{FDCF}\x{FDF0}-\x{FDFF}\x{FE70}-\x{FEFF}]|(?:\x{D802}[\x{DE60}-\x{DE9F}]|\x{D83B}[\x{DE00}-\x{DEFF}])){0,70}$/u
然而当我尝试

var_dump(preg_match('/^(?:[a-zA-Z\s\x{0600}-\x{06FF}\x{0750}-\x{077F}\x{08A0}-\x{08FF}\x{FB50}-\x{FDCF}\x{FDF0}-\x{FDFF}\x{FE70}-\x{FEFF}]|(?:\x{D802}[\x{DE60}-\x{DE9F}]|\x{D83B}[\x{DE00}-\x{DEFF}])){0,70}$/u', 'Foo Bar'));

它回来了


PHP警告:preg_match():编译失败:不允许使用Unicode代码点(>=0xd800&&如果字母表示语言的主要28个字符,您甚至不必构建基于代码点的字符类(您可以通过手动键入字母来构建它!)

但是,如果您的意思是阿拉伯语(
0600
06FF
255个字符),那么长字符类也不能提供您想要的

无论如何,你可以这样做:

/^(?!.*\d)[a-z\p{Arabic}\s]+$/iu

注意:您可能需要检查阿拉伯语脚本中的不同块。

为什么不仅
\p{Arabic}
?替换
(?:\uD802[\uDE60-\uDE9F]|\uD83B[\uDE00-\uDEFF])
替换为
[\x{10A60}-\x{10A9F}\x{1eee00}-\x{1eefff}
,表达式看起来像@revo:a-zA-Z\s}?包括英文字母,是的。你可能想在下面看到我的答案。
/^(?!.*\d)[a-z\p{Arabic}\s]+$/iu