我们要求使用以下规则验证密码格式
密码长度应为8-25个字符
1.numbers必须[0-9]
2.小案件强制[a-z]
3.强制要求[A-Z]
4.special character optional
以下正则表达式无效。它强迫提供特殊的性格
^(?=.\d)(?=.[a-z])(?=.[A-Z])[\w~@#$%^&+=`|{}:;!.?\""()[]-]{8,25}$
答案 0 :(得分:2)
如果特殊字符是可选的,那么只需使用:
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[\w~@#$%^&+=`|{}:;!.?\""()\[\]-]{8,25}$
你的前瞻有问题,例如(?=.\d)
没有声明密码出现在密码的任何位置,它断言密码中的第二个字符是一个数字。你的意思是(我认为)使用(?=.*\d)
。
因此,有三个前瞻可以满足您的强制要求,然后我们匹配以下字符类中的8到25个字符:
[\w~@#$%^&+=`|{}:;!.?\""()\[\]-]
这会匹配单词字符以及您想要的特殊字符,但特殊字符不是必需字符。请注意,在某些正则表达式引擎中,您需要转义字符类中的方括号。
答案 1 :(得分:0)
为什么你会追求一个大的,完全不可读的,实际上不可维护的正则表达式。切换到4个不同的表达式并一次检查一个。它易于维护,不易出错。添加更多规则或修改现有规则更容易。