您好,我需要一个正则表达式来在 java 中进行名称验证。名字和姓氏都在一个字符串中。 两个名称都需要大写并允许使用连字符。
有效: 约翰·史密斯、约翰·多伊·史密斯、约翰·史密斯·多伊
无效: 约翰·史密斯、约翰·史密斯、约翰·史密斯
到目前为止我已经尝试过这个:
[A-Z][a-z]{0,20}\s[A-Z][-a-zA-Z]{0,40}
但如果破折号后面的名称以小写字母开头,则无法捕获
最佳答案
稍微短一点的正则表达式
String regex = "[A-Z][a-z]{0,20}(?:[-\\h][A-Z][a-z]{0,40}){1,2}";
…通过此更改,爱尔兰名字(例如 Peter O’Toole)也得到正确处理
String regex = "[A-Z][a-z]{0,20}(?:[-\\h][A-Z](?:'[A-Z])?[a-z]{0,40}){1,2}";
关于java - 我需要一个正则表达式来使用 java 进行名称验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66817838/