正则表达式只匹配一个大写字母

时间:2018-08-31 08:24:01

标签: regex

如果不匹配,我需要匹配(至少必须只有一个大写字母)。

    Kitty   || Valid has one upper case letter  
    wiDivb  || Valid has one upper case letter
    ikBVu   || Invalid more than one upper case letter
    welcmw  || Invalid No upper case letter
    A       || Valid has one upper case letter  
    AA      || Invalid more than one upper case letter

我尝试过:

(?=.*[a-z])(?=.*[A-Z]{1})

但是它匹配,即使它有多个大写字母,我也只想要一个大写字母,所以我添加了{1}但没有

3 个答案:

答案 0 :(得分:3)

如果不需要任何小写字母,则可以使用:

^[a-z]*[A-Z][a-z]*$

这与任意数量的小写字母,单个大写字母,任意数量的小写字母匹配。

如果您至少需要一个小写字母,则可以使用一种交替方式来处理这两种情况,其中小写字母在左侧是可选的,在右侧是必需的,或者在右侧可选并且在左侧是可选的:

^(?:[a-z]*[A-Z][a-z]+|[a-z]+[A-Z][a-z]*)$

答案 1 :(得分:2)

您可以使用

^(?=.*[a-z])[a-z]*[A-Z][a-z]*$

请参见regex demo

详细信息

  • ^-字符串的开头
  • (?=.*[a-z])-从字符串开头起,除换行符以外的任何0+个字符之后,至少要有一个小写ASCII字母
  • [a-z]*-0 +小写ASCII字母
  • [A-Z]-大写ASCII字母
  • [a-z]*-0 +小写ASCII字母
  • $-字符串的结尾。

答案 2 :(得分:2)

您的正则表达式使用2个正向先行符,断言至少存在一个小写字符(?=.*[a-z])和至少一个大写字符(?=.*[A-Z])。这意味着也可以有2个大写字符。请注意,[A-Z]{1}可以写为[A-Z]

如果也只允许使用1个大写字母,则可能会匹配您的值而没有正的前瞻:

^[a-z]*[A-Z][a-z]*$

Regex demo

那将匹配:

  • ^断言字符串的开头
  • [a-z]*匹配零次或多次-z
  • [A-Z]一场A -Z比赛
  • [a-z]*匹配零次或多次-z
  • $声明字符串的结尾