我正在尝试为PHP中的名称编写一个合理的验证器,而我的第一次尝试包括以下模式:
// unicode letters, apostrophe, hyphen, space $namePattern = "/^([\\p{L}'\\- ])+$/";
最终将其传递给的呼叫preg_match()。据我所知,这可以与您的原始ASCII字母一起使用,但似乎在诸如Ă或张之类的易变字符上起作用。
preg_match()
模式本身有问题吗?也许我期望\p{L}做的工作比我想象的还要多?
\p{L}
还是与输入的传递方式有关?我不确定是否相关,但是我确实确保在表单页面上指定UTF8编码。
我认为问题要比这简单得多:您忘记了指定u修饰符。Unicode字符属性仅在UTF-8模式下可用。
u
您的正则表达式应为:
// unicode letters, apostrophe, hyphen, space $namePattern = '/^[-\' \p{L}]+$/u';