一尘不染

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

php

我正在尝试为PHP中的名称编写一个合理的验证器,而我的第一次尝试包括以下模式:

// unicode letters, apostrophe, hyphen, space
$namePattern = "/^([\\p{L}'\\- ])+$/";

最终将其传递给的呼叫preg_match()。据我所知,这可以与您的原始ASCII字母一起使用,但似乎在诸如Ă或张之类的易变字符上起作用。

模式本身有问题吗?也许我期望\p{L}做的工作比我想象的还要多?

还是与输入的传递方式有关?我不确定是否相关,但是我确实确保在表单页面上指定UTF8编码。


阅读 348

收藏
2020-05-26

共1个答案

一尘不染

我认为问题要比这简单得多:您忘记了指定u修饰符。Unicode字符属性仅在UTF-8模式下可用。

您的正则表达式应为:

// unicode letters, apostrophe, hyphen, space
$namePattern = '/^[-\' \p{L}]+$/u';
2020-05-26