我正在尝试验证仅用英文字母写的名字。排除其他特殊字母,例如ç,é等。

我的要求是:


每个字都应以大写字母开头(彼得·斯维德勒)
一个单词不应包含两个大写字母(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 MVivekanand P V中的可选姓氏

\b包围以允许边界。如果需要,可以使用锚定。

10-08 17:58