帮助解决PHP中的正则表达式问题(我可能正在做一些愚蠢的事情)

Bre*_*gan 1 php regex

我试图在一些PHP代码中集成我从同事(在VB中实现它)收到的正则表达式.正则表达式旨在验证密码是否满足某些复杂性要求,但我的函数总是返回false,即使密码符合我们的复杂性要求.要求是:

至少8个字符,最多20个字符,不能包含空格,必须包含至少一(1)个数字和一(1)个特殊字符.密码中可以使用以下特殊字符: - !@#$%&*()_ + =.?.

我提供的正则表达式是:

ValidationExpression = "^.*(?=.{8,20})(?=.*\d)(?=.*[a-zA-Z])(?=.*[-!@#$%&*()_+=.?])(?!.*\s).*$"
Run Code Online (Sandbox Code Playgroud)

我写的用于验证密码的函数是:

function validatePassword($pass){
$regex = "^.*(?=.{8,20})(?=.*\d)(?=.*[a-zA-Z])(?=.*[-!@#$%&*()_+=.?])(?!.*\s).*$";
return preg_match($regex, $pass);
}
Run Code Online (Sandbox Code Playgroud)

我怀疑问题在于我在做一些愚蠢的事情,但由于正则表达式仍然令我困惑,我不知道问题是什么.有任何想法吗?

has*_*nge 7

您需要将正则表达式括在分隔符中,即

$regex = "/^.*(?=.{8,20})(?=.*\d)(?=.*[a-zA-Z])(?=.*[-!@#$%&*()_+=.?])(?!.*\s).*$/";
Run Code Online (Sandbox Code Playgroud)