С вашим шаблоном все в порядке, но вам нужно последовательно выбирать элементы и их свойства и вызывать соответствующие методы для соответствующих переменных:
var pw = document.getElementById('password').value;
поместит значение (строку) в переменную pw
, поэтому
if (pw.value == pattern) {
не имеет смысла - строки не имеют свойства .value
.
Чтобы определить объект регулярного выражения, используйте синтаксис /
, например
var pattern = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;
не синтаксис строки ("
разделители), иначе у вас будет только строка.
Чтобы проверить, проходит ли строка регулярное выражение, вы можете вызвать .test
для регулярного выражения, передав строку, которую вы хотите проверить.
Строка, которую вы назначаете для style.color
, должна быть в нижнем регистре, а не в заголовке:
function green() {
var pwText = document.getElementById('password').value;
var pwElm = document.getElementById('pw');
var pattern = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;
if (pattern.test(pwText)) {
pw.style.color = "green";
pw.innerHTML = "Password: ✔";
} else {
pw.style.color = "black";
pw.innerHTML = "Password:";
}
}
<label id="pw" for="password">Password:</label>
<input id="password" name="password" minlength="8" maxlength="50" class="form-control" type="password" onkeyup="green()" value="" />
Кроме того, вы можете подумать о том, чтобы дать понять пользователю, что введенного пароля недостаточно, возможно, закрасьте элемент красным, если он недостаточно хорош:
function green() {
var pwText = document.getElementById('password').value;
var pwElm = document.getElementById('pw');
var pattern = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;
if (pattern.test(pwText)) {
pw.style.color = "green";
pw.textContent = "Password: ✔";
} else {
pw.style.color = "red";
pw.textContent = "Password: ❌";
}
}
<label id="pw" for="password">Password:</label>
<input id="password" name="password" minlength="8" maxlength="50" class="form-control" type="password" onkeyup="green()" value="" />