国际名称的最佳 preg_match 表达式

Best preg_match expression for international name

我试图找到一个好的 preg_match 表达式,它允许所有字母(包括重音字母)、 space 和这些符号:- '

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

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

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

但是口音太多了,我希望找到更好的解决方案。

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

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

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

编辑

这将确保名称 starts/ends 带有字母且不包含连续符号:

$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
}