Санкционировать, что у текста было точно 3 числа с регулярным выражением

Я хочу санкционировать в языке сценариев JavaScript, что пользователь или пароль только приняли точно 3 числа с регулярным выражением.

У меня есть следующее, проблема - что, когда я ввожу информацию в компьютер 1234 он принимает это мне, как правильный, я нуждаюсь в том, чтобы санкционировать это, чтобы мочь реализовывать оставшуюся часть моей страницы.

function validar() {
    usuario = document.getElementById('usuario').value;

    patron = /\d{3}/;
    if(patron.test(usuario)){
        alert("correcto")
    }else{
        alert("ERROR")

}
3
задан 22.02.2018, 18:40
2 ответа

Давайте идти по частям, 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>
1
ответ дан 24.11.2019, 01:43

Проблема с твоим 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 и $ в конце концов.

2
ответ дан 24.11.2019, 01:43
  • 1
    [0-9] он оказывается уродливым когда могут использовать \d. –  Mariano 22.02.2018, 18:43

Теги

Похожие вопросы