Проверка правильности в javascript с помощью setCustomValidity

63
7

var ck_login = new RegExp("/^[a-zA-Z]{5,12}$/");
var ck_password = new RegExp("/^(?=.*\d)(?=.*[a-z]).{6,16}$/");

function validate(){
var login = document.getElementById("login").value;
var loginErr = document.getElementById("login");

var password = document.getElementById("password").value;
var passwordErr = document.getElementById("password");

if (ck_password.test(password) == false) {
passwordErr.setCustomValidity('Password must have at least 6 characters at least no more than 16. At least one low and one number');
return false;
}
if (ck_login.test(login) == false) {
loginErr.setCustomValidity('Login must have at least 5 characters and no more than 12');
return false;
}
return true;

}

<form action="" method="post" onSubmit="return validate();">
<label>Username:</label>
<input type="text" name="login" id="login" required="required">
<label>Password:</label>
<input type="text" name="password" id="password" required="required">
<input type="submit">
</form>

Я пытаюсь сделать проверку формы, где Login должен иметь не менее 5 символов и не более 12, а пароль должен иметь не менее 6 символов, по крайней мере, не более 16. По крайней мере один низкий и один номер.

Regex верен, но он не работает в javascript правильно. Я не могу найти, какую ошибку я делаю.

Благодарю.

спросил(а) 2021-01-25T13:44:45+03:00 4 месяца, 3 недели назад
1
Решение
109

Не создавайте регулярные выражения с помощью конструктора RegExp.

Делай это так:

var ck_login = /^[a-zA-Z]{5,12}$/;
var ck_password = /^(?=.*\d)(?=.*[a-z]).{6,16}$/;

Если вы собираетесь использовать конструктор RegExp, не используйте слэши в начале конца строки.

var ck_login = new RegExp("^[a-zA-Z]{5,12}$");
var ck_password = new RegExp("^(?=.*\d)(?=.*[a-z]).{6,16}$");

ответил(а) 2021-01-25T13:44:45+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема