正则表达式为欧洲名称

时间:2012-11-27 15:23:40

标签: php regex

我正在寻找欧洲名称的正则表达式。 我找到了这个,用javascript工作得很好:

/^([ \u00c0-\u01ffa-zA-Z'\-])+$/

我将其转换为PHP,但它不起作用:

/^([ \x{00C0}-\x{01FF}a-zA-Z'\-])+$/

我的正则表达式必须与名称匹配:

  

Jean-Paul le Marchant

     

JérômeL'activé

所以字符a-zA-Z,没有特别的字符,如@#$%^©等,但所有重音/欧洲字符,如éèàôç等。

3 个答案:

答案 0 :(得分:5)

您需要激活Unicode模式才能使这些转义序列生效:

/^([ \x{00C0}-\x{01FF}a-zA-Z'\-])+$/u

请注意,括号不是必需的:

/^[ \x{00C0}-\x{01FF}a-zA-Z'\-]+$/u

字符类提供正则表达式的单个“元素”,可以立即使用量词重复。

答案 1 :(得分:0)

确保使用utf8编码,然后在正则表达式上拍打u修饰符:

$regex = '/^([ \x{00C0}-\x{01FF}a-zA-Z\'\-])+$/u';

答案 2 :(得分:0)

这个PHP正则表达式应该可以工作:

$str = "Jérôme L'activé";
if (preg_match("/^[\s\x{00C0}-\x{01FF}a-z'-]+$/iu", $str, $match))
   print_r($match);

<强>输出:

Array
(
    [0] => Jérôme L'activé
)

RegEx Flags

  • u - 在匹配中启用Unicode
  • i - 忽略案例比较

PS:在方括号内,如果它位于第一个或最后一个位置,则无需转义连字符-