第一场比赛后匹配整个字符串

时间:2016-08-26 09:14:49

标签: php regex

我遇到一个小问题,我尝试为PHP创建自己的密码正则表达式。

这是我的表达:

/([a-zA-Z]+[0-9]+[!?]+)/

匹配后停止,例如a1?是第一个匹配,a2!是第二个匹配,但我希望它匹配整个字符串:

a1?a2!

之后,我尝试了这个表达式:

/([a-zA-Z]+[0-9]+[!?]+){6,12}/

但是,它与任何东西都不匹配。

2 个答案:

答案 0 :(得分:2)

请注意,您的/([a-zA-Z]+[0-9]+[!?]+){6,12}/正则表达式匹配6到12个1 +字母,1 +位和1 + !?符号的序列。

实际上,您希望匹配一个或多个此类序列,然后使用仅仅+量词:

'/^(?:[a-zA-Z]+[0-9]+[!?]+)+$/D' 

请参阅regex demo

由于您需要验证模式,我认为您需要匹配整个字符串,因此您需要锚点^$以及使用/D修饰符禁止尾随\n

答案 1 :(得分:1)

这个正则表达式将用于您的密码" a1?a2!" -

  

((?= [A-ZA-Z])(?=。 \ d)(?= [?!])(?=。 [A-ZA-Z])(?= \ d)(?=。 [?!])。{6,20})

但你应该使用标准密码,如 -

  

^(?= [AZ])(?=。 [AZ])(?= \ d)(?=。 [$ @ $! ?%的&安培;])[A-ZA-Z \ d $ @ $%&安培;!?] {8,}

此正则表达式适用于:至少8个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符