我正在寻找欧洲名称的正则表达式。我找到了这个,它适用于 javascript:
/^([ \u00c0-\u01ffa-zA-Z'\-])+$/
我将它转换为 PHP,但它不起作用:
/^([ \x{00C0}-\x{01FF}a-zA-Z'\-])+$/
我的正则表达式必须与这样的名称匹配:
让-保罗·勒马尔尚
Jérôme L'activé
所以字符 a-zA-Z,没有像 @#$%^© 等特殊字符,而是所有重音/欧洲字符,如 éèàôç 等。
您需要激活 Unicode 模式才能使这些转义序列起作用:
/^([ \x{00C0}-\x{01FF}a-zA-Z'\-])+$/u
请注意,括号不是必需的:
/^[ \x{00C0}-\x{01FF}a-zA-Z'\-]+$/u
字符类提供了正则表达式的单个“元素”,可以立即用量词重复。
确保使用 utf8 编码,然后u
在正则表达式上添加修饰符:
$regex = '/^([ \x{00C0}-\x{01FF}a-zA-Z\'\-])+$/u';
这个 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é
)
正则表达式标志
PS:-
在方括号内,如果它位于第一个或最后一个位置,则不需要转义连字符。