否定包含三个部分的复杂正则表达式

Negating a complex regex containing three parts

我需要一个正则表达式,当字符串不包含小写和大写字母时匹配。

例如

abcABC123abc123ABC123&^ - 应该匹配

AbCA12bAB^%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]+)$

See this demo at regex101 (used + for one or more)

我会选择:

^(?:[^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()_+=-] 并列出允许的特殊字符。

https://regex101.com/r/Wg6tLn/1