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