Jef*_*Lee 14 php regex unicode pcre character-properties
我正在尝试为PHP中的名称编写一个合理宽松的验证器,我的第一次尝试包含以下模式:
// unicode letters, apostrophe, hyphen, space
$namePattern = "/^([\\p{L}'\\- ])+$/";
Run Code Online (Sandbox Code Playgroud)
这最终传递给了一个电话preg_match().据我所知,这适用于你的vanilla ASCII字母表,但似乎惹上像Ă或张这样的尖锐字符.
这个模式本身有什么问题吗?也许我期待\p{L}比我想的更多的工作?
或者它与传入输入的方式有关?我不确定它是否相关,但我确实确保在表单页面上指定UTF8编码.
Nik*_*kiC 26
我认为问题比这简单得多:你忘了指定u 修饰符.Unicode字符属性仅在UTF-8模式下可用.
你的正则表达式应该是:
// unicode letters, apostrophe, hyphen, space
$namePattern = '/^[-\' \p{L}]+$/u';
Run Code Online (Sandbox Code Playgroud)