如果不匹配,我需要匹配(至少必须只有一个大写字母)。
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}
但没有
答案 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]*$
那将匹配:
^
断言字符串的开头[a-z]*
匹配零次或多次-z [A-Z]
一场A -Z比赛[a-z]*
匹配零次或多次-z $
声明字符串的结尾