我试图找到一个涵盖很多结果的正则表达式,如果不是很多国际名称中包含特殊字母的话,我现在使用的那个就足够了以及连字符。
我现在使用的那个看起来像这样:
/^[A-Za-zåäöÅÄÖ\s\-\ ]*$/
它允许连字符和空格,但它也允许它们在字符串的开头或结尾,我不想允许。
我需要修改它以允许:
éýÿüåäö
等(最好不要手动全部写)-
单词之间的连字符,但不是在完整字符串之前或之后
它不应该允许数字,它还没有。由于我还没有完成正则表达式构建的工作,我对如何实现这一目标一无所知,我发现很多解决方案涵盖了一种或另一种情况,但不是我需要的所有。我很感激你的帮助。正则表达式应该适用于PHP验证。
修改:
$fname = 'Scrooge Mc-Duck'; //Only example string
$fname = trim($fname);
if (!preg_match('/^\p{Lu}\p{Ll}+([ -]+\p{Lu}\p{Ll}+)*$/', $fname)) {
$fnameErr = 'Invalid first name';
}
使用@ npinti解决方案时会输出错误。
答案 0 :(得分:0)
假设您的正则表达式引擎可以公开character classes。您可以使用\p{L}
来匹配任何字母。因此,要匹配名称,您可以使用^\p{Lu}\p{Ll}+([ -]+\p{Lu}\p{Ll}+)*$
。
这将允许您匹配大写字母后跟一个或多个小写字母。反过来,这可以是0个或更多个空格和破折号的组合,然后是大写字母和一个或多个小写字母。开头和结尾的^
和$
确保正则表达式与整个字符串匹配。
可以查看正则表达式的演示here。