名称的正则表达式 - 资本化和无特殊字符

时间:2016-01-23 18:40:43

标签: java android regex

我正在尝试验证仅以英文字母编写的名称。其他特殊字母如ç,é等不包括在内。

我的要求是:

  1. 每个单词都应以大写字母(Peter Svidler)开头
  2. 一个单词不应该有两个大写字母(PEter Svidler必须失败)
  3. 不允许任何数字。 (Peter Svidler9或Peter 9 Svidler应该失败)
  4. 不允许使用特殊字符。 (Peter Svidler。或Peter S.vidler必须失败)
  5. 要匹配的案例: 一个。 R G S Devan或Achar K K S R(在开始或结束时允许尽可能多的大写首字母) 湾一个词或多个单词(Chandra,Chandra Shekhar Raju,......)
  6. 我试图通过2个表达式验证

    \b[A-Z].*?\b
    

    ^[a-zA-Z ]*$
    

    但它与PEter SVidler或PETER SVIDLER相匹配。

    如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

请记住您的要求我想出了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包围以允许边界。如果这是您需要的,您可以使用锚定。

答案 1 :(得分:1)

基于@noob的想法,我想出了这个:

\b[A-Z][a-z]*( [A-Z][a-z]*)*\b

匹配:

  1. John D E F W
  2. D E S Matthew
  3. Alladi Krishna Swami Aiyar
  4. Raja Ravi Varma M
  5. A B C D E F
  6. 比赛案例5是美中不足的唯一。我认为鉴于要求,RegEx无法阻止。我想在输入字符串通过RegEx并检查验证器方法中的字符串长度后对其进行标记。

    我错过了什么吗?

    我已经测试了这个RegEx here

答案 2 :(得分:0)

这是以下的变体:

not_this|forget_this|nevermind_this|(but_keep_this)

所以你可以提出:

^(?:\b[a-z]|\b[A-Z]{2,})(*SKIP)(*FAIL)|^([A-Za-z ]+)$

查看regex demo on regex101.com

相关问题