Я хочу проверить в JavaScript, что имя пользователя или пароль принимают ровно 3 числа с регулярным выражением.
У меня есть следующее: проблема в том, что когда 1234
я вхожу, он принимает это как правильное, мне нужно подтвердить это, чтобы иметь возможность выполнять остальную часть моей страницы.
function validar() {
usuario = document.getElementById('usuario').value;
patron = /\d{3}/;
if(patron.test(usuario)){
alert("correcto")
}else{
alert("ERROR")
}
Пойдем по частям, от более простого к более сложному, и все упрощая в конце.
1. Всего 3 цифры
Если бы это было просто для того, чтобы увидеть, есть ли у него 3 цифры, зачем использовать регулярное выражение? Это число от 100 до 999, верно?
2. 3 цифры в конце
Но если имя пользователя оканчивается на 3 цифры, то мы должны гарантировать, что регулярное выражение соответствует от начала (
^
) до конца текста ($
).Напомним, что регулярное выражение соответствует любой части текста (первой найденной). Вот почему ваш код не сработал, потому что он соответствует первым 3 цифрам из 4, которые были в тексте.
Итак, мы заставляем сопоставлять начальную позицию, любое количество нецифровых символов, все 3 цифры и конечную позицию текста.
\D
соответствует 1 символу, любому символу, который не является цифрой (это то же самое , что[^0-9]
и ; и*
он повторяется от 0 до бесконечности раз.3. Регулярное выражение ровно для 3 цифр в любой позиции
Теперь, если они могут быть где угодно, вы должны разрешить их
\D*
между собой, что будет примерно так/^\D*\d\D*\d\D*\d\D*$/
.Но это можно сделать проще, используя группу
(?:
...)
и повторяя этой группе:4. Удалите все, что не является цифрой
Но, возможно, вам будет гораздо проще все исключить, оставив только цифры и используя то же, что и в первом пункте:
Проблема с вашим выражением заключается в том, что если вы напишете текст, состоящий из 3 чисел подряд, он вернет true, потому что именно это означает ваше выражение.
Вы должны указать, что от начала до конца строки она содержит только 3 числа, используя
^
в начале и$
в конце:^
означает поиск в начале строки и$
в конце.