我需要一个正则表达式,当字符串既不包含小写字母又包含大写字母时,匹配该正则表达式。
- 如果字符串只有小写字母->应该匹配
- 如果字符串只有大写字母->应该匹配
- 如果字符串只有数字或特殊字符->应该匹配
例如
abc
,ABC
,123
,abc123
,ABC123&^
-应该匹配
AbC
,A12b
,AB^%12c
-不匹配
基本上,我需要以下正则表达式的取反/求反:
^(?=.*[a-z])(?=.*[A-Z]).+$
我需要一个正则表达式,当字符串既不包含小写字母又包含大写字母时,匹配该正则表达式。
例如
abc
,ABC
,123
,abc123
,ABC123&^
-应该匹配
AbC
,A12b
,AB^%12c
-不匹配
基本上,我需要以下正则表达式的取反/求反:
^(?=.*[a-z])(?=.*[A-Z]).+$
听起来好像不需要任何环视。
仅匹配not a-z
的字符,或者仅匹配非A-Z
的字符。
^(?:[^a-z]+|[^A-Z]+)$
See this demo at regex101(二手+
for one or more)
您可以使用
^(?!.*[A-Z].*[a-z])(?!.*[a-z].*[A-Z])\S+$
或
^(?=(?:[^a-z]+|[^A-Z]+)$).*$
请参见regex demo #1和regex demo #2
当您需要在模式上施加更多限制时,可以在更复杂的场景中使用类似的环视解决方案。否则,考虑一个non-lookaround solution。
详细信息
^
-字符串的开头(?!.*[A-Z].*[a-z])
-无大写字母,后接小写字母(?!.*[a-z].*[A-Z])
-无小写字母,后跟大写字母(?=(?:[^a-z]+|[^A-Z]+)$)
-正向超前,要求在字符串末尾需要1个或多个除小写ASCII字母([^a-z]+
)以外的字符,或1个或多个除大写ASCII字母({{ 1}})到字符串的末尾[^A-Z]+
-除换行符以外的其他1个字符.+
-字符串的结尾。您可以使用此正则表达式
^(([A-Z0-9?&%^](?![a-z]))+|([a-z0-9?&%^](?![A-Z]))+)$
您可以测试更多案例here。
我只添加了字符?&%^
作为可能的字符,但是您可以添加任意一个。
我会选择:
^(?:[^a-z]+?|[^A-Z]+?)$
它翻译为“如果整个字符串由非小写字母或非大写字母组成,则匹配该字符串。”
使用惰性量词+?
,以便在启用多行标志时遵循结尾字符串$
的锚点。如果您只验证单行字符串,则可以简单地使用+
而不带问号。
如果您有特定允许的特殊字符的白名单,则将[^A-Z]
更改为[A-Z0-9()_+=-]
并列出允许的特殊字符。