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

标签 java regex validation

您好,我需要一个正则表达式来在 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/

相关文章:

node.js - NodeJS : Server-side request data validation

java - 在 Swagger Editor 中更改 java 项目的默认包名称

java - SQLite 异常 : table already exists

java - 在java中聚焦时如何获取实际的文本字段

Java抽象使用instanceof从List中收集类

c# - 在C#中选择带有正则表达式的主机名?

java - 获取字符串中的字符串

regex - 为什么人们使用正则表达式进行电子邮件和其他复杂的验证?

java - 在 Java 中使用正则表达式检查数字

jquery - 如何使用基于单选按钮输入的jquery跳过隐藏输入字段的验证(删除必需属性)