我正在使用此正则表达式来接受重音字符
/^([\p{L}a-zA-Z ,-]*)$/i
当我在这个网站上测试我的正则表达式时:http://rubular.com/r/MRESYEGO2d 一切都很好,但是当我在我的php中使用相同的正则表达式时,它无法正常工作。
$alphaNumCity = "/^([\p{L}a-zA-Z0-9 ,-]*)$/i";
if (preg_match($alphaNumCity, $champ)) {
echo "<label for='tags'>Villes<span style='color:red;'>*</span></label><input id='tags' name='businessVille' value='".$champ."' required />";
} else {
echo "<label for='tags'>Villes<span style='color:red;'>(entrer un nom de ville valide)*</span></label><input id='tags' name='businessVille' required />";
$valide = false;
}
此代码将在其他地方发布。
我不明白为什么它在这里工作http://rubular.com/r/MRESYEGO2d而不是我的代码?
答案 0 :(得分:1)
使用unicode flag(或unicode修饰符):
/^([\p{L}a-zA-Z ,-]*)$/iu
答案 1 :(得分:1)
unicode标志“u”,/^([\p{L}a-zA-Z0-9 ,-]*)$/iu
附带一些注释:
关于使用/ u模式时UTF-8字符串的有效性 修饰语,有些事情需要注意;
- 开始检查模式
如果模式本身包含无效的UTF-8字符,则会出现错误(如上文所述 - “UTF-8的有效性 从PHP 4.3.5“
当主题字符串包含无效的UTF-8序列/代码点时,它基本上会导致preg_ *“安静死亡” 功能,没有任何匹配但没有指示 字符串无效UTF-8
PCRE认为五个和六个八位字节的UTF-8字符序列是有效的(在模式和主题字符串中)但不支持这些 在Unicode中(参见“安全性”的第5.9节“字符编码”) Linux和Unix编程HOWTO“ - 可在以下位置找到 http://www.tldp.org/和其他地方)
- 醇>
对于PHP中的一个示例算法,它测试UTF-8字符串的有效性(并丢弃五个/六个八位字节序列),请前往: http://hsivonen.iki.fi/php-utf8/
请参阅文档以获取代码示例和更多信息:http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php#54805