【发布时间】:2019-12-09 04:07:10
【问题描述】:
我有一些 HTML 和 Javascript 要求用户使用以下规则输入密码:
- 至少 8 个字符
- 至少 1 个大写字母
- 至少 1 个小写字母
- 至少 1 个特殊字符
- 至少 1 个数字字符
这之后是密码确认条目。在密码和密码确认输入下方有 div 块,其中包含包含在 p 标记中的错误消息,这些错误消息应该在发生任何错误时变得可见。它似乎不起作用。
我还在此 CSHTML 文件中使用 C# Razor 代码,因此我需要在字符串中使用“@@”而不是 @。如果我错了,请告诉我。
密码:(必须包含至少 1 个小写字母字符、1 个大写字母字符、1 个特殊字符、1 个数字字符和至少 8 个字符长)
<input type="password" name="password_admin1_create" oninput="return validate_password()"><br><br>
<script>
var password = document.getElementsByName("password_admin1_create")[0];
function validatePassword(val) {
var strongRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@@#\$%\^&\*])(?=.{8,})/;
console.log(re.test(val))
return strongRegex.test(val);
}
function validate_password() {
if (validatePassword(password.value)) {
document.getElementById("password_result_invalid").style.visibility = "hidden";
document.getElementById("password_result_invalid").style.height = "0";
} else {
document.getElementById("password_result_invalid").style.visibility = "visible";
document.getElementById("password_result_invalid").style.height = "initial";
}
}
</script>
<div id="password_result_invalid" class="error_verify">
<p style="color:red">Invalid password format.</p>
</div>
<p>Please confirm the password:</p>
<input type="password" name="password_admin1_create_confirm" oninput="return validate_password_confirm()"><br><br>
<script>
var password_confirm = document.getElementsByName("password_admin1_create_confirm")[0].value;
var password = document.getElementsByName("password_admin1_create")[0].value;
function validate_password_confirm() {
if (password_confirm == password) {
document.getElementById("password_confirmation_invalid").style.visibility = "hidden";
document.getElementById("password_confirmation_invalid").style.height = "0";
} else {
document.getElementById("password_confirmation_invalid").style.visibility = "visible";
document.getElementById("password_confirmation_invalid").style.height = "initial";
}
}
</script>
<div id="password_confirmation_invalid" class="error_verify">
<p style="color:red">Passwords do not match.</p>
</div>
【问题讨论】:
-
那么问题是什么?
-
什么不适合你?附带说明一下,如果密码包含空格,最后一个断言
(?=.{8,})也会成功。 -
错误消息在预期的时候是不可见的。我尝试输入一个不带空格的无效密码,但没有错误消息
-
复杂的密码规则通常不会带来更安全的密码,重要的只是最小长度。人们无法记住大量的强密码,这样的规则会干扰好的密码方案。人们可以非常有创意地绕过这些规则,例如通过使用“Password-2019”等弱密码。通常,您最终会使用较弱的密码而不是较强的密码。最近 NIST 发布了official paper,建议反对此类规则,并反对其以前的建议。
标签: javascript regex passwords