【问题标题】:Regex that excludes spaces and requires 2 capital letters or more排除空格并需要 2 个或更多大写字母的正则表达式
【发布时间】:2018-10-09 10:59:11
【问题描述】:

我正在尝试创建一个匹配字符串的正则表达式:

  • 19 到 90 个字符
  • 符号
  • 至少 2 个大写字母字符
  • 小写字母字符
  • 没有空格

我已经知道,对于大小和空间排除,正则表达式将是:

^[^ ]{19,90}$

而且我知道这个会匹配任何至少有 2 个大写字符的字符串:

^(.*?[A-Z]){2,}.*$

我不知道如何将它们结合起来。字符串没有上下文。

编辑:我忘了说如果正则表达式排除以 .com 或 .jpeg 或 .png 或任何 .something 结尾的字符串会更好(“某事”是 2-5 个字符)。

【问题讨论】:

标签: regex


【解决方案1】:

您可以使用此处所述的反向引用:https://www.ocpsoft.org/tutorials/regular-expressions/and-in-regex/

此处有示例的另一个参考:https://www.regular-expressions.info/refcapture.html

【讨论】:

    【解决方案2】:

    这个regex 应该做你想做的事。

    ^(?=(?:\w*\W+)+\w*$)(?=(?:\S*?[A-Z]){2,}\S*?$)(?=(?:\S*?[a-z])+\S*?$)(?!.*?\.\w{2,5}$).{19,90}$
    

    基本上它使用三个正向预读和一个负向预读来保证您指定的条件:

    (?=(?:\w*\W+)+\w*$)
    

    确保至少有一个非单词(符号)字符

    (?=(?:\S*?[A-Z]){2,}\S*?$) 
    

    确保至少有两个大写字符,如果字符串中有空格也排除匹配

    (?=(?:\S*?[a-z])+\S*?$)
    

    确保字符串中至少有一个小写字符。负前瞻

    (?!.*?\.\w{2,5}$)
    

    确保以 . 结尾的字符串。并排除 2-5 个字符

    最后,

    .{19.90}
    

    执行实际匹配并确保有 19 到 90 个字符。

    【讨论】:

    • 谢谢。那比我更复杂。只是我需要在最后排除带有.*?\.\w{2,5} 的字符串。在这种情况下,这是一项要求。
    • 您的问题是要排除以该模式结尾的字符串...
    【解决方案3】:

    根据您的要求,我建议使用以下模式:

    ^(?=.*[a-z])(?=.*[A-Z].*[A-Z])(?=.*[^\s]).{19,90}$
    

    Demo

    我不只是排除空格,而是使用\s,因为您可能也不希望允许制表符、换行符等。但是,仍然不清楚您要允许哪些符号,例如[a-zA-Z!"§$%&\/()=?+]

    ^(?=.*[a-z])(?=.*[A-Z].*[A-Z])(?=.*[^\s])(?=[a-zA-Z!"§$%&\/()=?+]).{19,90}$
    

    为了满足您在字符串末尾不匹配类似文件的扩展名的附加要求,请添加一个否定的前瞻:(?!.*\.\w{2,5}$)

    ^(?=.*[a-z])(?=.*[A-Z].*[A-Z])(?=.*[^\s])(?=[a-zA-Z!"§$%&\/()=?+]).{19,90}$
    

    Demo2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-06
      相关资源
      最近更新 更多