我正在尝试验证仅用英文字母写的名字。排除其他特殊字母,例如ç,é等。
我的要求是:
每个字都应以大写字母开头(彼得·斯维德勒)
一个单词不应包含两个大写字母(PETER Svidler必须失败)
不允许输入数字。 (Peter Svidler9或Peter 9 Svidler应该失败)
不允许使用特殊字符。 (Peter Svidler。或Peter S.vidler必须失败)
要匹配的案例:
一种。 R G S Devan或Achar K K S R(允许在开头或结尾处使用尽可能多的首字母大写)
b。一个字或一个以上的字(Chandra,Chandra Shekhar Raju等)
我尝试通过2个表达式进行验证
\b[A-Z].*?\b
和
^[a-zA-Z ]*$
但这与PEter SVidler或PETER SVIDLER匹配。
如何解决呢?
最佳答案
请记住您的要求,我想出了this regex.
正则表达式:\b[A-Z][a-z]* [A-Z][a-z]*( [A-Z])?\b
说明:[A-Z][a-z]*
与名字匹配,第一个字符为大写字母,其余的为小写字母,可以为0 or many
,后跟一个空格。[A-Z][a-z]*
与姓氏或中间名匹配,与名字相同。( [A-Z])?
匹配Botvinnik M M
或Vivekanand P V
中的可选姓氏
被\b
包围以允许边界。如果需要,可以使用锚定。