验证可以
的名称 约翰,约翰保罗等我使用这个正则表达式:
String regex = "[A-Z]([a-z]+|\\s[a-z]+)";
但是当我这样做时:
boolean ok = Pattern.matches(regex, "John Paul");
比赛失败了吗?
为什么呢?我想使用匹配来验证字符串的整体...
这是正则表达式错了吗?
答案 0 :(得分:6)
验证名称会遇到很多问题 - 有很多不同类型的名称。考虑:
Love Symbol #2
最简单的方法是让用户输入他们的名字并按原样接受。如果你想将其分解为个性化名称和姓氏,那么我建议你将输入字段分成两个(或更多)部分,或者只是要求“首选名称”或“昵称”字段
我怀疑你会发现一个可以验证所有各种名称的正则表达式 - 在你开始尝试之前获得一大堆样本数据(最好是现实世界)。
答案 1 :(得分:4)
Paul
有一个大写字母P,你的正则表达式不允许在第二个单词的开头大写。
答案 2 :(得分:3)
尝试这样的事情:
[A-Z][a-z]+( [A-Z][a-z]+)?
?
是与姓氏匹配的可选部分。这将捕获组1中的姓氏(带有前面的空格)。如果您不需要此捕获,则可以使用非捕获组(?:...)
。
这是原始模式:
[A-Z]([a-z]+|\s[a-z]+)
扩展此匹配的替换:
[A-Z][a-z]+
或者:
[A-Z]\s[a-z]+
这与John
和J paul
匹配,但显然与John Paul
不匹配。