多个标准的单一正则表达式模式

时间:2015-01-21 15:33:39

标签: javascript regex

问题与其他SO问题不重复,因为答案与列出的标准不匹配,请参阅下文。

使用输入文本的正则表达式模式实现的标准是,

  • 支持至少一个大写字母
  • 支持至少一个小写字母
  • 支持列出至少一个特殊字符 - > @%$
  • 支持至少一个数字

没有开始和结束标准。

尝试使用以下单个正则表达式实现

^(
  (\w+\d+[@%\$]+)
     |
     (\d+[@%\$]+\w+)
        |
        ([@%\$]+\d+\w+)
             |
             (\w+[@%\$]+\d+)
)$

问题是,

支持至少一个大写不起作用。 我很确定这不是构建正则表达式模式的好方法。

请帮助我以单一的正则表达式模式实现这些标准。

提前致谢!!!

通过标准

测试@ 123
测试@ 123
@ 123tesT
123 @测试
TTTTeeeess @@@@ $$$ 111112222
@@@@ $$$ 1111TTT @@@ $$ ESSS

失败标准

测试(无特殊字符)
@ 123
123
@
T
测试
test @ 123(无大写)
测试@ 123安培; ('&'不支持该模式)
@ 123test
@ TTT123(无小写)

2 个答案:

答案 0 :(得分:3)

你可以使用这个基于前瞻性的正则表达式:

^(?=.*?[A-Z])(?=.*?[a-z])(?=\D*\d)(?=.*?[$@%])[\w$@%]+$

RegEx Demo

答案 1 :(得分:0)

尝试这样做(将\w更改为[a-zA-Z\d],因为您可能不希望_签名):

^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?\d)(?=.*?[@%$])[a-zA-Z\d@%$]+$

演示:https://regex101.com/r/kS3cI4/2