在PCRE/PHP中匹配Unicode字母字符

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)