Hyp*_*zeR 6 php regex unicode utf-8
我需要一个用于PHP的Regex来执行以下操作:
我想允许[a-zα-ωá-ź-яա-ֆა-ჰא-ת]和中文,日文(更多utf-8)字母; 我要禁止[^ 98765432100123456789](阿拉伯数字);
这就是我所做的:
function isValidFirstName($first_name) {
return preg_match("/^(?=[a-z?-?á-??-??-??-??-?]+([a-z?-?á-??-??-??-??-?' -]+)?\z)[a-z?-?á-??-??-??-??-?' -]+$/i", $first_name);
}
Run Code Online (Sandbox Code Playgroud)
它看起来很有效,但是如果我键入超过1种语言的字母,它就不会验证.
示例:АвпаВапапваá-ź约翰 - 没有验证.约翰格格 - 验证,á-źá-ź - 验证.
我想要所有这些.
或者如果有办法,如果用户输入了更多的语言字符串,则回显消息.
我无法在这里重现失败案例(\xd0\x90\xd0\xb2\xd0\xbf\xd0\xb0 \xd0\x92\xd0\xb0\xd0\xbf\xd0\xb0\xd0\xbf\xd0\xb2\xd0\xb0 \xc3\xa1-\xc5\xba John验证得很好),但是您可以大大简化正则表达式 - 您不需要先行断言:
preg_match(\'/^[a-z\xce\xb1-\xcf\x89\xc3\xa1-\xc5\xba\xd0\xb0-\xd1\x8f\xd5\xa1-\xd6\x86\xe1\x83\x90-\xe1\x83\xb0\xd7\x90-\xd7\xaa][a-z\xce\xb1-\xcf\x89\xc3\xa1-\xc5\xba\xd0\xb0-\xd1\x8f\xd5\xa1-\xd6\x86\xe1\x83\x90-\xe1\x83\xb0\xd7\x90-\xd7\xaa\\\' -]*$/i\', $first_name)\nRun Code Online (Sandbox Code Playgroud)\n\n据我从您给出的字符范围来看,您不需要排除数字,因为这些字符类之外的任何内容都将导致正则表达式失败。
\n\n另一个考虑因素:如果您的目标是允许任何语言/脚本中的任何字母(加上一些标点符号和空格),您可以(如果您使用的是 Unicode 字符串)进一步简化为:
\n\npreg_match(\'/^\\pL[\\pL\\\' -]*$/iu\', $first_name)\nRun Code Online (Sandbox Code Playgroud)\n\n但一般来说,我不会尝试通过正则表达式(或任何其他方式)验证名称:程序员相信名称的谎言。
\n| 归档时间: |
|
| 查看次数: |
966 次 |
| 最近记录: |