我们使用以下功能根据客户要求验证密码。这适用于我们的开发环境以及客户登台环境,但是当推送到生产密码时,随机失败。分段和生产假设是相同的,并且很难弄清楚它为什么不起作用,因为我们无法访问生产环境。
密码需要验证以下内容:
!@#$%^&*()
( Shift +标准美国键盘上的任何数字数字)代码在我们的开发环境中工作,因此它也适用于您。我们需要的是看看它可能失败的原因和
<?php
function isStrongPassword($pass, $char = 10) {
$bits = ['A-Z', 'a-z', '0-9',preg_quote('#$%^&*()','/')];
if (is_numeric($char) && strlen($pass) >= $char) {
foreach ($bits AS $bit) {
if (preg_match('@[' . $bit . ']@', $pass) == false) {
return false;
}
}
return true;
}
return false;
}
?>
答案 0 :(得分:0)
将我的评论翻译成答案。
似乎所有代码中的代码都可以使用lookaheads转换为单个正则表达式:
/^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[!@#$%^&*()]).{10,}$/
4个前瞻(?=...)
中的每一个都确保存在大写字母,小写字母,数字和特殊字符。 .{10,}
确保输入的最小长度为10。