Я хочу санкционировать в языке сценариев JavaScript, что пользователь или пароль только приняли точно 3 числа с регулярным выражением.
У меня есть следующее, проблема - что, когда я ввожу информацию в компьютер 1234
он принимает это мне, как правильный, я нуждаюсь в том, чтобы санкционировать это, чтобы мочь реализовывать оставшуюся часть моей страницы.
function validar() {
usuario = document.getElementById('usuario').value;
patron = /\d{3}/;
if(patron.test(usuario)){
alert("correcto")
}else{
alert("ERROR")
}
Давайте идти по частям, mÃ: s простой в mÃ: s осложненный, и упрощая все в конце.
1. S¦lo 3 d¦-gitos
, Если он состоял s¦lo в том, чтобы видеть, есть ли у него 3 d¦-gitos, Â: для qué использовать regex? Его один número между 100 и 999, Â: нет?
if (usuario > 99 && usuario < 1000) {
//válido
}
2. 3 d¦-gitos в конце
, Но если пользователь - имя, законченное в 3 d¦-gitos, тогда мы должны гарантировать себе, что regex встретился с начала (^
) до конца текста ($
).
Давайте Помнить, что регулярный expresi¦n встречается с любая часть текста (с первой, что он находит). Поэтому твой c¦digo бил козырем, потому что coincid¦ - в с первые 3 d¦-gitos внутри 4, что ten¦ - в текст.
textoterminadoen1234
// ^^^
// coincide con estos 3
Тогда, мы вынуждаем, в который он совпал с начальным posici¦n, любое количество символов, которые не были бы d¦-gitos, 3 d¦-gitos, и конечный posici¦n текста.
/^\D*\d{3}$/
\D
встречается с 1 характером, любой, который не был бы d¦-gito (это то же самое, что и [^0-9]
; и *
он это повторяет между 0 и бесконечными разами. document
.getElementById('usuario')
.addEventListener('input',validar);
function validar() {
var usuario = document.getElementById('usuario').value,
resultado = document.getElementById('resultado');
patron = /^\D*\d{3}$/;
if(patron.test(usuario)){
resultado.innerText = "correcto";
}else{
resultado.innerText = "ERROR";
}
}
<input type="text" id="usuario" placeholder="Nombre de usuario">
<pre id="resultado"></pre>
3. Regex для точно 3 d¦-gitos в любом posici¦n
Сейчас, если они могут быть где угодно, нужно позволять \D*
между способом каждого, который ser¦ - во что-то как /^\D*\d\D*\d\D*\d\D*$/
.
, Но возможно делать mÃ: s простой, используя группу (?:
… )
и повторяя эту группу:
/^(?:\D*\d){3}\D*$/
document
.getElementById('usuario')
.addEventListener('input',validar);
function validar() {
var usuario = document.getElementById('usuario').value,
resultado = document.getElementById('resultado');
patron = /^(?:\D*\d){3}\D*$/;
if(patron.test(usuario)){
resultado.innerText = "correcto";
}else{
resultado.innerText = "ERROR";
}
}
<input type="text" id="usuario" placeholder="Nombre de usuario">
<pre id="resultado"></pre>
4. Удалять все то, что не d¦-gito
, Но quizÃ: s, ты будьте много mÃ: s простой удалять все, оставляя s¦lo d¦-gitos и используя то же самое что в первой точке:
document
.getElementById('usuario')
.addEventListener('input',validar);
function validar() {
var usuario = document.getElementById('usuario').value,
resultado = document.getElementById('resultado');
var soloDigitos = usuario.replace(/\D+/g, '');
if(soloDigitos > 99 && soloDigitos < 1000){
resultado.innerText = "correcto";
}else{
resultado.innerText = "ERROR";
}
}
<input type="text" id="usuario" placeholder="Nombre de usuario">
<pre id="resultado"></pre>
Проблема с твоим expresi¦n состоит в том, что, если ты пишешь текст, у которого были бы 3 números продолженные, эта будет возвращаться true благодаря тому, что это - то, что твой expresi¦n значит.
ты Должен показывать ему, что с начала до конца string, он только содержал 3 числа используя ^
сначала и $
в конце концов:
function validar() {
usuario = document.getElementById('usuario').value;
patron = /^[0-9]{3}$/;
if(patron.test(usuario)){
alert("correcto")
}else{
alert("ERROR")
}
}
<input id="usuario" type="text" />
<button onclick="validar()"> Validar</button>
^
значит, что он ищет в начало string и $
в конце концов.