我正在尝试编写一个相对宽松的 PHP 名称验证器,我的第一次尝试包括以下模式:
// unicode letters, apostrophe, hyphen, space
$namePattern = "/^([\\p{L}'\\- ])+$/";
这最终会传递给对preg_match()
的调用。据我所知,这适用于您的普通ASCII字母表,但似乎在处理像Ă或张这样的更复杂字符时出现问题。
模式本身有问题吗?也许我期望\p{L}
做更多的工作,而实际上它并没有做到?
还是与输入传递方式有关?我不确定它是否相关,但我确保在表单页面上指定了UTF8编码。
int(0)
。你的文件可能没有使用 UTF-8 编码。 - NikiC(*UTF)(*UCP)^[-\' \p{L}]+$
(请参见PCRE的特殊模式开头修饰符)。 - zx81