国际名称

时间:2015-05-07 17:31:15

标签: php preg-match

我正在尝试找到一个好的preg_match表达式,允许所有字母(包含重音字母),空格和这些符号:- '

我认为这可能是一个很好的解决方案'/^\p{L}+$/ui',但我找不到一个成功的方法来添加我需要的符号,如果可能的话......

否则我想我应该使用这样的东西:

'#^[a-zA-Z0-9àòäöüÄÖÜ \.\]]+$#'

但是有很多口音我希望找到更好的解决方案。

1 个答案:

答案 0 :(得分:1)

尝试将\p{L}和允许的符号放在括号内:

$name = "B-jör n'Bòrg";
if (preg_match("/^[- '\p{L}]+$/u", $name)) {
    echo "$name is a valid name!"; // It is
}

您可能还想添加一些额外的支票,例如确保名称以字母开头和结尾而不是符号。

修改

这将确保名称以字母开头/结尾并且不包含连续符号:

$name = "-Björ n''Bòrg-";
if (preg_match("/^\p{L}([- ']\p{L}|\p{L})*$/u", $name)) {
    echo "$name is a valid name!"; // It's not
}