我需要一个正则表达式来用java验证名称

我需要一个正则表达式来用java验证名称,java,regex,validation,Java,Regex,Validation,您好,我需要一个正则表达式用于java中的名称验证。名字和姓氏都在一个字符串中。 两个名称都需要大写,并允许使用连字符的名称 有效期: 约翰·史密斯,约翰·多伊·史密斯,约翰·多伊·史密斯 无效: 约翰·史密斯,约翰·多伊·史密斯,约翰·多伊·史密斯 到目前为止,我已经尝试过: [A-Z][a-z]{0,20}\s[A-Z][-a-zA-Z]{0,40} 但是,如果破折号后面的名称以小写字母开头,则无法捕获。您可以使用以大写字母A-Z开头的重复组,并在其中匹配空格或- ^[A-Z][a-z]{

您好,我需要一个正则表达式用于java中的名称验证。名字和姓氏都在一个字符串中。 两个名称都需要大写,并允许使用连字符的名称

有效期: 约翰·史密斯,约翰·多伊·史密斯,约翰·多伊·史密斯

无效: 约翰·史密斯,约翰·多伊·史密斯,约翰·多伊·史密斯

到目前为止,我已经尝试过:

[A-Z][a-z]{0,20}\s[A-Z][-a-zA-Z]{0,40}

但是,如果破折号后面的名称以小写字母开头,则无法捕获。您可以使用以大写字母A-Z开头的重复组,并在其中匹配空格或
-

^[A-Z][a-z]{0,20}(?:[\h-][A-Z][a-z]{0,40})*(?:,\h*[A-Z][a-z]{0,20}(?:[\h-][A-Z][a-z]{0,40})*)*$

在爪哇

String regex = "^[A-Z][a-z]{0,20}(?:[\\h-][A-Z][a-z]{0,40})*(?:,\\h*[A-Z][a-z]{0,20}(?:[\\h-][A-Z][a-z]{0,40})*)*$";
稍微短一点的正则表达式就可以了

…随着这一变化,爱尔兰人的名字(如彼得·奥图尔)也被正确对待


这是因为在正则表达式的[a-Z]部分找不到小写字母。您需要调整它,以便它也能找到小写字母是
John Smith Doe
有效还是无效?约翰·史密斯·多福怎么样?詹姆斯·奥布莱恩怎么样?你确定要告诉别人他们的名字无效吗?最好只是将姓氏和名字分开,并强制两个字段的第一个字符都使用大写字母
String regex = "[A-Z][a-z]{0,20}(?:[-\\h][A-Z][a-z]{0,40}){1,2}";
String regex = "[A-Z][a-z]{0,20}(?:[-\\h][A-Z](?:'[A-Z])?[a-z]{0,40}){1,2}";