我正在尝试用 PHP 编写一个合理宽松的名称验证器,我的第一次尝试包括以下模式:// unicode 字母、撇号、连字符、空格$namePattern = \'/^([\\...
我正在尝试用 PHP 编写一个合理允许的名称验证器,我的第一次尝试包含以下模式:
// unicode letters, apostrophe, hyphen, space
$namePattern = "/^([\\p{L}'\\- ])+$/";
这最终被传递给对 的调用 preg_match()
。据我所知,这适用于普通的 ASCII 字母表,但似乎会遇到更复杂的字符,如 Ă 或 。
模式本身有问题吗?也许我期望 \p{L}
做的工作比我想象的要多?
或者这是否与输入传递的方式有关?我不确定这是否相关,但我确实确保在表单页面上指定了 UTF8 编码。
如果其他人在这里查看却无法使其工作,请注意, /u
跨不同 PHP 版本的 Unicode 脚本不会产生一致的结果。
查看示例: https://3v4l.org/4hB9e