当我想更改新密码时,如何验证顺序字符串/int?例如:
old pass: mypassword1
new pass: mypassword2
那么它会返回false,但如果它像这个
old pass: mypassword1
new pass: mypassword3
那么它将返回true。
我只为新密码尝试了regEx方法。
提前谢谢。
试试这个:
<?php
$oldpass = 'mypassword1';
$newpass = 'mypassword2';
preg_match('/^([^'d]+)(['d]*?)$/', $oldpass, $match);
$string = $match[1];
$number = $match[2] + 1;
$string .= $number;
$valid = $newpass === $string ? false : true;
var_dump($valid);
?>
由于您处理的是密码,因此不应该与以前的密码进行比较(应该对其进行安全哈希处理,因此不可逆)。PHP在文档中有一些关于这个主题的优秀阅读材料。
作为替代方案,您可以生成已知会违反验证规则的密码变体,然后查看这些变体是否匹配。
假设您正在使用密码功能:
$hash = password_hash($password, PASSWORD_DEFAULT);
// AND....
password_verify($password, $hash);
变体可能看起来像:
$pwd = 'word1';
$num = substr($pwd,-1);
$invalid = false;
$phrase = substr($pwd, 0, -1);
foreach([$num++, $num--] as $variation) {
if(password_verify($phrase.$variation, $hash)) {
// password matches, the user is just incrementing the digit.
$invalid = true;
}
}
因此,如果$invalid
为true,则密码会破坏您的验证规则。
这不是一个愚蠢的方法。它只与您生成无效密码变体的能力一样好。