匹配阿拉伯文或英文名称的正则表达式
Regular Expression to match Arabic or English Name
我想要一个正则表达式来匹配只允许字符(字母)和空格的阿拉伯语或英语名称,我找到了一个 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 的
/^(?:[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'));
或
var_dump(preg_match('/^(?:[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', 'Foo Bar'));
它returns
PHP Warning: preg_match(): Compilation failed: disallowed Unicode code point (>= 0xd800 && <= 0xdfff) at offset 127 in php shell code on line 1
bool(false)
请帮助解决这个警告!
感谢任何帮助!
谢谢!
如果字母指的是语言主要 28 个字符,您甚至不必构建基于代码点的字符 class(您可以通过手动输入字母来构建它!)。
但是如果你的意思是 Arabic
(0600
–06FF
, 255 个字符) 那么又是那个长字符 class没有提供您想要的。
无论如何你可以这样做:
/^(?!.*\d)[a-z\p{Arabic}\s]+$/iu
注意:您可能需要检查阿拉伯语脚本中的不同块 here。
我想要一个正则表达式来匹配只允许字符(字母)和空格的阿拉伯语或英语名称,我找到了一个 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 的
/^(?:[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'));
或
var_dump(preg_match('/^(?:[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', 'Foo Bar'));
它returns
PHP Warning: preg_match(): Compilation failed: disallowed Unicode code point (>= 0xd800 && <= 0xdfff) at offset 127 in php shell code on line 1 bool(false)
请帮助解决这个警告!
感谢任何帮助! 谢谢!
如果字母指的是语言主要 28 个字符,您甚至不必构建基于代码点的字符 class(您可以通过手动输入字母来构建它!)。
但是如果你的意思是 Arabic
(0600
–06FF
, 255 个字符) 那么又是那个长字符 class没有提供您想要的。
无论如何你可以这样做:
/^(?!.*\d)[a-z\p{Arabic}\s]+$/iu
注意:您可能需要检查阿拉伯语脚本中的不同块 here。