否定包含三个部分的复杂正则表达式
Negating a complex regex containing three parts
我需要一个正则表达式,当字符串不包含小写和大写字母时匹配。
- 如果字符串只有小写字母 -> 应该被匹配
- 如果字符串只有大写字母 -> 应该被匹配
- 如果字符串只有数字或特殊字符 -> 应该被匹配
例如
abc
、ABC
、123
、abc123
、ABC123&^
- 应该匹配
AbC
、A12b
、AB^%12c
- 不应匹配
基本上我需要以下正则表达式的 inverse/negation:
^(?=.*[a-z])(?=.*[A-Z]).+$
您可以使用这个正则表达式
^(([A-Z0-9?&%^](?![a-z]))+|([a-z0-9?&%^](?![A-Z]))+)$
您可以测试更多案例here。
我只添加了字符 ?&%^
作为可能的字符,但您可以添加任何您喜欢的字符。
您可以使用
^(?!.*[A-Z].*[a-z])(?!.*[a-z].*[A-Z])\S+$
或者
^(?=(?:[^a-z]+|[^A-Z]+)$).*$
见regex demo #1 and regex demo #2
当您需要对模式应用更多限制时,可以在更复杂的场景中使用像这样的环视解决方案。否则,考虑 。
详情
^
- 字符串开头
(?!.*[A-Z].*[a-z])
- 没有大写字母后跟小写字母
(?!.*[a-z].*[A-Z])
- 没有小写字母后跟大写字母
(?=(?:[^a-z]+|[^A-Z]+)$)
- 一个积极的前瞻,需要 1 个或多个字符而不是小写 ASCII 字母 ([^a-z]+
) 到字符串的末尾,或者 1 个或多个字符而不是大写 ASCII 字母 ( [^A-Z]+
) 到字符串末尾
.+
- 除换行字符外的 1+ 个字符
$
- 字符串结尾。
听起来不需要任何环顾四周。
要么只匹配 not a-z
的字符,要么只匹配不是 A-Z
.
的字符
^(?:[^a-z]+|[^A-Z]+)$
我会选择:
^(?:[^a-z]+?|[^A-Z]+?)$
翻译成"If the entire string is composed of non-lowercase letters or non-uppercase letters then match the string."
使用惰性量词 +?
以便在启用多行标志时遵守结束字符串 $
锚点。如果您只验证单行字符串,则可以简单地使用 +
而不带问号。
如果您有特定允许的特殊字符的白名单,则将 [^A-Z]
更改为 [A-Z0-9()_+=-]
并列出允许的特殊字符。
我需要一个正则表达式,当字符串不包含小写和大写字母时匹配。
- 如果字符串只有小写字母 -> 应该被匹配
- 如果字符串只有大写字母 -> 应该被匹配
- 如果字符串只有数字或特殊字符 -> 应该被匹配
例如
abc
、ABC
、123
、abc123
、ABC123&^
- 应该匹配
AbC
、A12b
、AB^%12c
- 不应匹配
基本上我需要以下正则表达式的 inverse/negation:
^(?=.*[a-z])(?=.*[A-Z]).+$
您可以使用这个正则表达式
^(([A-Z0-9?&%^](?![a-z]))+|([a-z0-9?&%^](?![A-Z]))+)$
您可以测试更多案例here。
我只添加了字符 ?&%^
作为可能的字符,但您可以添加任何您喜欢的字符。
您可以使用
^(?!.*[A-Z].*[a-z])(?!.*[a-z].*[A-Z])\S+$
或者
^(?=(?:[^a-z]+|[^A-Z]+)$).*$
见regex demo #1 and regex demo #2
当您需要对模式应用更多限制时,可以在更复杂的场景中使用像这样的环视解决方案。否则,考虑
详情
^
- 字符串开头(?!.*[A-Z].*[a-z])
- 没有大写字母后跟小写字母(?!.*[a-z].*[A-Z])
- 没有小写字母后跟大写字母(?=(?:[^a-z]+|[^A-Z]+)$)
- 一个积极的前瞻,需要 1 个或多个字符而不是小写 ASCII 字母 ([^a-z]+
) 到字符串的末尾,或者 1 个或多个字符而不是大写 ASCII 字母 ([^A-Z]+
) 到字符串末尾.+
- 除换行字符外的 1+ 个字符$
- 字符串结尾。
听起来不需要任何环顾四周。
要么只匹配 not a-z
的字符,要么只匹配不是 A-Z
.
^(?:[^a-z]+|[^A-Z]+)$
我会选择:
^(?:[^a-z]+?|[^A-Z]+?)$
翻译成"If the entire string is composed of non-lowercase letters or non-uppercase letters then match the string."
使用惰性量词 +?
以便在启用多行标志时遵守结束字符串 $
锚点。如果您只验证单行字符串,则可以简单地使用 +
而不带问号。
如果您有特定允许的特殊字符的白名单,则将 [^A-Z]
更改为 [A-Z0-9()_+=-]
并列出允许的特殊字符。