正则表达式,不包括空格,需要2个大写字母或更多

时间:2018-04-28 23:40:52

标签: regex

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

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

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

^[^ ]{19,90}$

我知道这个会匹配任何一个至少包含2个大写字符的字符串:

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

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

编辑:我忘了说如果正则表达式排除用.com或.jpeg或.png或任何.something完成的字符串("某些东西" 2-5个字符)会更好

3 个答案:

答案 0 :(得分:1)

这个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}$)

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

最后,

.{19.90}

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

答案 1 :(得分:1)

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

^(?=.*[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

答案 2 :(得分:-1)

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

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