2

我正在寻找欧洲名称的正则表达式。我找到了这个,它适用于 javascript:

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

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

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

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

让-保罗·勒马尔尚

Jérôme L'activé

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

4

3 回答 3

5

您需要激活 Unicode 模式才能使这些转义序列起作用:

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

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

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

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

于 2012-11-27T15:26:06.737 回答
0

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

$regex = '/^([ \x{00C0}-\x{01FF}a-zA-Z\'\-])+$/u';
于 2012-11-27T15:26:35.310 回答
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é
)

正则表达式标志

  • u - 在匹配中启用 Unicode
  • i - 忽略大小写比较

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

于 2012-11-27T15:29:11.310 回答