我尝试验证名称字段,对于此字段,我希望允许最终用户添加Merianos Nikos
,Μέριανος Νίκος
(希腊语)或其他任何语言的字符。形式。
表格是首字母大写字母,低位字母的剩余字母,以及至少两个字。
Currectly我有这个正则表达式/^([A-Z][a-z]*((\s)))+[A-Z][a-z]*$/
与英语完美配合,但与希腊人和其他语言不一致。
最后,我想用至少一个单词验证另一个字段,并使用frist字母大写,但是这个字段也可以包含单词后面的字符。
目前我使用的是正常的正则表达式/^[\s\w\.\-_]+$/
,但我再次遇到希腊语和其他语言的问题。
答案 0 :(得分:2)
您可以通过使用Unicode Categories
来完成此操作。因此,正则表达式^\p{Lu}\p{Ll}+( \p{Lu}\p{Ll}+)*$
将匹配大写字母后跟一个或多个小写字母,后跟0个或更多其他名称,用空格分隔。表达式的示例显示为here。
关于你的第二点,你可以使用排序^\p{Lu}\p{Ll}*$
的东西,它至少会有1个大写字母后跟0个或更多小写字母。
上面的表达式假设您的名字中没有引号,例如O'Brian
或破折号Foo-bar
。如果你想特别处理希腊名字,并且你知道希腊名字既没有引号也没有破折号,那么这应该不是一个大问题。
通常只需确保提供的名称不是空的,而不是指定一些严格的形式。有关此事的更多信息,请参阅this问题。
答案 1 :(得分:0)
^[{\p{L}}{0-9}]$
此正则表达式匹配来自任何语言(以及数字)的任何字母。
答案 2 :(得分:0)
function isFullname($fullname) {
return preg_match("/^((?:\p{Ll}|\p{Lu}){2,30}\s?){2,4}$/g", $fullname);
}
这对我很有用。因为用户名也可能是小写的。
并且它可以有至少 2 个字符的名字或姓氏。此外,我接受最多 30 个字符的名称。我让它至少重复 2 次,最多 4 次。
它可以有一个像 McCésy 这样的名字(真的吗?=))......