我需要一个用于 PHP 的 Regex 来执行以下操作:
我想允许[a-zα-ωá-źа-яա-ֆა-ჰא-ת]和中文、日文(更多utf-8)字母; 我想禁止 [^٩٨٧٦٥٤٣٢١٠01222556789](阿拉伯数字);
这是我所做的:
function isValidFirstName($first_name) {
return preg_match("/^(?=[a-zα-ωá-źа-яա-ֆა-ჰא-ת]+([a-zα-ωá-źа-яա-ֆა-ჰא-ת' -]+)?\z)[a-zα-ωá-źа-яա-ֆა-ჰא-ת' -]+$/i", $first_name);
}
看起来它可以工作,但如果我输入超过 1 种语言的字母,它就不会生效。
示例:Авпа Вапапва á-ź John - 未验证。 John Gger - 验证,á-ź á-ź - 验证。
我想要所有这些。
或者,如果有办法,在用户输入更多语言字符串时回显消息。
最佳答案
我无法在此处重现失败案例(Авпа Вапапва á-ź John
验证得很好),但您可以大大简化正则表达式 - 您不需要先行断言:
preg_match('/^[a-zα-ωá-źа-яա-ֆა-ჰא-ת][a-zα-ωá-źа-яա-ֆა-ჰא-ת\' -]*$/i', $first_name)
据我所知,从您提供的字符范围来看,您不需要排除数字,因为这些字符类之外的任何内容都会导致正则表达式失败。
另一个考虑因素:如果您的目标是允许来自任何语言/文字的任何字母(加上一些标点符号和空格),您可以(如果您使用的是 Unicode 字符串)进一步简化为:
preg_match('/^\pL[\pL\' -]*$/iu', $first_name)
但一般来说,我不会尝试通过正则表达式(或任何其他方式)来验证名称:Falsehoods programmers believe about names .
关于php - 只允许一些字母,禁止特殊字符($% 等),除了其他字符 (' -),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10496953/