所以我以为我做对了吗?
if(!preg_match('^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).+.{7,}$', $passOne)) {
$msg = "Password does not contain at least 1 number/letter, 8 character minimum requirement.";
}
我在https://regex101.com/对其进行了测试,并将^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).+.{7,}$
用于工作,RubyGlue12
之类的内容通过并且匹配其他内容并且不是。
但无论如何,我都无法在实际的PHP代码中进行任何匹配。即使POST是手动变量。
修改:$_POST['password']
为$passOne
帮助?
答案 0 :(得分:3)
你有.+.{7,}
没有多大意义,因为它意味着匹配任何字符1次或更多次,然后任何字符匹配7次或更多次。
1个字母,1个数字和最少8个字符的正则表达式看起来像
(?i)^(?=.*[a-z])(?=.*\d).{8,}$
正则表达式解释:
(?i)
- 关闭案例敏感度(除非您需要检查1个大写和1个小写字母 - 然后,删除i
标记并替换{{1}与(?=.*[a-z])
)(?=.*[a-z])(?=.*[A-Z])
- 字符串开头^
- 要求至少有一个字母的正面预见(?=.*[a-z])
- 至少有一位数的正向前瞻要求(?=.*\d)
- 至少8个字符.{8,}
- 字符串结束。 PHP代码是:
$
是的,使用$re = "/^(?=.*[a-z])(?=.*\\d).{8,}$/i";
$passOne = "RubyGlue12";
//$passOne = "eee"; // uncomment to echo the error message
if(!preg_match($re, $passOne)) {
echo "Password does not contain at least 1 number/letter, 8 character minimum requirement.";
}
函数,您必须使用一些正则表达式分隔符。我在这里使用preg_match
。
答案 1 :(得分:1)
这是一个正则表达式,可以测试密码不应该的内容,而不是应该的密码。
/^(.{0,7}|[^a-z]*|[^\d]*)$/i
示例:强>
if (preg_match('/^(.{0,7}|[^a-z]*|[^\d]*)$/i', $passOne)) {
echo "Validation failed.\n";
}
<强>解释强>
正则表达式中基本上有3个单独的测试(每个测试由|
分隔,并且由于最后的i
选项,每个测试都不区分大小写。如果传递任何测试,那么整个验证将失败。