取反包含三个部分的复杂正则表达式

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

  • 如果字符串只有小写字母->应该匹配
  • 如果字符串只有大写字母->应该匹配
  • 如果字符串只有数字或特殊字符->应该匹配

例如

abcABC123abc123ABC123&^-应该匹配

AbCA12bAB^%12c-不匹配

基本上,我需要以下正则表达式的取反/求反:

  

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

theresa88520 回答:取反包含三个部分的复杂正则表达式

听起来好像不需要任何环视。

仅匹配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 #1regex 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()_+=-]并列出允许的特殊字符。

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

本文链接:https://www.f2er.com/2884923.html

大家都在问