我尝试过但无法找到这个问题的答案,所以我问这个问题。
我需要为密码验证创建一个正则表达式,它必须具备以下条件。
我创建了以下正则表达式,但它无法正常工作。
preg_match('/[A-Za-z\d$!^(){}?\[\]<>~%@#&*+=_-]{8,40}$/', $newpassword)
有人可以帮我正确修复这个正则表达式吗?
感谢。
答案 0 :(得分:2)
您可以使用lookaheads验证您的条件:
^(?=.*[a-zA-Z])(?=.*\d)(?=.*[~!^(){}<>%@#&*+=_-])[^\s$`,.\/\\;:'"|]{8,40}$
让我们分解一下,因为它看起来很讨厌:
^
断言它位于字符串的开头。(?=.*[a-zA-Z])
,验证它至少包含一个字母(大写或小写)。(?=.*\d)
,验证它至少包含一位数字。(?=.*[~!^(){}<>%@#&*+=_-])
,验证它包含特殊字符列表中的至少一个字符。[^\s$,.\/\\;:'"|]{8,40}$
验证整个字符串的长度在8到40个字符之间,并且使用倒置字符类不包含空格或非法字符。