正则表达式密码不起作用

时间:2018-01-22 10:08:28

标签: regex

我们要求使用以下规则验证密码格式

密码长度应为8-25个字符

1.numbers必须[0-9]

2.小案件强制[a-z]

3.强制要求[A-Z]

4.special character optional

以下正则表达式无效。它强迫提供特殊的性格

^(?=.\d)(?=.[a-z])(?=.[A-Z])[\w~@#$%^&+=`|{}:;!.?\""()[]-]{8,25}$

2 个答案:

答案 0 :(得分:2)

如果特殊字符是可选的,那么只需使用:

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[\w~@#$%^&+=`|{}:;!.?\""()\[\]-]{8,25}$

你的前瞻有问题,例如(?=.\d)没有声明密码出现在密码的任何位置,它断言密码中的第二个字符是一个数字。你的意思是(我认为)使用(?=.*\d)

因此,有三个前瞻可以满足您的强制要求,然后我们匹配以下字符类中的8到25个字符:

[\w~@#$%^&+=`|{}:;!.?\""()\[\]-]

这会匹配单词字符以及您想要的特殊字符,但特殊字符不是必需字符。请注意,在某些正则表达式引擎中,您需要转义字符类中的方括号。

Demo

答案 1 :(得分:0)

为什么你会追求一个大的,完全不可读的,实际上不可维护的正则表达式。切换到4个不同的表达式并一次检查一个。它易于维护,不易出错。添加更多规则或修改现有规则更容易。