正则表达式中的重音字符

时间:2013-09-30 16:51:06

标签: php regex

我正在使用此正则表达式来接受重音字符

/^([\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而不是我的代码?

2 个答案:

答案 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字符串的有效性   修饰语,有些事情需要注意;

     
      
  1. 如果模式本身包含无效的UTF-8字符,则会出现错误(如上文所述 - “UTF-8的有效性   从PHP 4.3.5“

  2. 开始检查模式   
  3. 当主题字符串包含无效的UTF-8序列/代码点时,它基本上会导致preg_ *“安静死亡”   功能,没有任何匹配但没有指示   字符串无效UTF-8

  4.   
  5. PCRE认为五个和六个八位字节的UTF-8字符序列是有效的(在模式和主题字符串中)但不支持这些   在Unicode中(参见“安全性”的第5.9节“字符编码”)   Linux和Unix编程HOWTO“ - 可在以下位置找到   http://www.tldp.org/和其他地方)

  6.   
  7. 对于PHP中的一个示例算法,它测试UTF-8字符串的有效性(并丢弃五个/六个八位字节序列),请前往:   http://hsivonen.iki.fi/php-utf8/

  8.   

请参阅文档以获取代码示例和更多信息:http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php#54805