我正在尝试用 PHP 编写一个合理宽松的名称验证器,我的第一次尝试包括以下模式:// unicode 字母、撇号、连字符、空格$namePattern = \'/^([\\...
我正在尝试用 PHP 编写一个合理允许的名称验证器,我的第一次尝试包含以下模式:
// unicode letters, apostrophe, hyphen, space
$namePattern = "/^([\\p{L}'\\- ])+$/";
这最终被传递给对 的调用 preg_match()
。据我所知,这适用于普通的 ASCII 字母表,但似乎会遇到更复杂的字符,如 Ă 或 。
模式本身有问题吗?也许我期望 \p{L}
做的工作比我想象的要多?
或者这是否与输入传递的方式有关?我不确定这是否相关,但我确实确保在表单页面上指定了 UTF8 编码。
我认为问题比这简单得多:您忘记指定 u
modifier 。Unicode 字符属性 仅在 UTF-8 模式下可用 .
你的正则表达式应该是:
// unicode letters, apostrophe, hyphen, space
$namePattern = '/^[-\' \p{L}]+$/u';