我正在尝试为 PHP 中的名称编写一个相当宽松的验证器,我的第一次尝试包括以下模式:
// unicode letters, apostrophe, hyphen, space
$namePattern = "/^([\\p{L}'\\- ])+$/";
这最终会传递给对 preg_match()
的调用。据我所知,这适用于您的原始 ASCII 字母表,但似乎会遇到 Ă 或张等更刺激的字符。
模式本身有问题吗?也许我期望 \p{L}
比我想象的做更多的工作?
或者它是否与输入的传递方式有关?我不确定它是否相关,但我确实确保在表单页面上指定了 UTF8 编码。
最佳答案
我认为问题比这简单得多:您忘记指定 u
modifier . Unicode 字符属性为 only available in UTF-8 mode .
你的正则表达式应该是:
// unicode letters, apostrophe, hyphen, space
$namePattern = '/^[-\' \p{L}]+$/u';
关于php - 在 PCRE/PHP 中匹配 Unicode 字母字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4983392/