你错过了
u
pattern modifier
在正则表达式中:
u(PCRE_UTF8)
此修改器启用与Perl不兼容的PCRE的附加功能。模式和主题字符串被视为UTF-8。此修饰符可从Unix的PHP4.1.0或更高版本获得,也可从win32的PHP4.2.3获得。从PHP4.3.5开始检查模式和主题的UTF-8有效性。无效的主题将导致preg_*函数不匹配任何内容;无效模式将触发E_WARNING级别的错误。自PHP 5.3.4(分别为PCRE 7.3 2007-08-28)以来,五个和六个八位字节UTF-8序列被视为无效;以前那些被认为是有效的UTF-8。
我还建议用单引号代替双引号,以防止PHP在字符串中插入内容。
而不是:
preg_match_all("/^[\pL',-.\s]+$/", $value, $match);
使用:
preg_match_all('/^[\pL\',-.\s]+$/u', $value, $match);