php - 只允许一些字母,禁止特殊字符($% 等),除了其他字符 (' -)

标签 php regex unicode utf-8

我需要一个用于 PHPRegex 来执行以下操作:

我想允许[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/

相关文章:

php - 仅获取具有特定键的数组元素

带有非拉丁字符的 Javascript slug 函数

javascript - 将我在 Google Analytics 中的目标 url 与正则表达式匹配

php - 这个使用 PHP $$ 语法的循环在做什么?

php - htaccess 基于查询字符串的 url

Javascript 匹配问题,非详尽无遗?

javascript - 在Python中匹配Javascript转义表单数据

Python if 语句检查字符串中的英镑符号?

mysql - 中文名称和 Unicode 基本多语言平面 (BMP)

c++ - Windows C++ 多字节/单码