我想要一个能够匹配只允许字符(字母)和空格的阿拉伯语OR英文名称的正则表达式,我找到了一个可以完成工作的JavaScript RegEx
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'));
OR
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'));
它返回
PHP警告:preg_match():编译失败:第1行的php shell代码中的偏移量127处不允许使用Unicode代码点(> = 0xd800&&< = 0xdfff) 布尔(假)
请帮助解决此警告!
任何帮助表示赞赏! 谢谢!
答案 0 :(得分:1)
如果用字母表示语言主要是28个字符,你甚至不必构建基于代码点的字符类(你可以通过手动输入字母来构建它!)。
但如果你的意思是Arabic
(0600
- 06FF
, 255 个字符)那么这个长字符类并不能提供你想要的东西
无论如何你可以坚持下去:
/^(?!.*\d)[a-z\p{Arabic}\s]+$/iu
注意:您可能想要检查阿拉伯语脚本here中的不同块。