Как мне установить эту функцию сопоставления регулярных выражений javascript? - PullRequest
1 голос
/ 07 августа 2010

У меня есть текстовое поле ввода, которое запускает функцию js для события keyup для сопоставления с допустимой строкой (совпадение с шаблоном имени домена, здесь было найдено регулярное выражение).

Я написал оператор if, чтобы проверить, является ли ввод допустимым шаблоном, а затем длиной более 3 символов.

Очевидно, мои ifs не работают так, как я этого хотел.Когда на входе 3 или более символов, это нормально.

Но если на входе меньше 3 символов, он не сможет выполнить регулярное выражение шаблона.

Пример: если в поле ввода есть «dd» (без кавычек), функция сообщит, что у меня неправильный шаблон, когда ДОЛЖНА предупредить, что длина ввода меньше 3 символов.

Из включенного оператора оповещения во входном значении нет лишних пробелов или символов.

<input id="quick" type="text" size="20" onKeyUp="test()"></input>

функциональный тест -

function test(){

   var liveword = document.getElementById("quick").value;
   var valid = /^[a-zA-Z0-9][a-zA-Z0-9\-\_]+[a-zA-Z0-9]$/;
  alert("xxx"+liveword+"xxx");

    if (liveword.match(valid))
   {
        if (liveword.length < 3)
        {
        alert ('word less than 3');
        }
        else {
    alert ('word more than 3');
            }
     }//outside if

     else {
         alert('enter correct pattern');

     }  

} //close

Ответы [ 3 ]

2 голосов
/ 08 августа 2010

Поскольку ваш шаблон написан на данный момент, ничто из трех букв никогда не сможет ему соответствовать. Ваше регулярное выражение говорит: «Найдите любой буквенно-цифровой символ, за которым следует хотя бы один буквенно-цифровой символ или тире или знак подчеркивания, за которым следует последний буквенно-цифровой код».

Я думаю, что вместо этого вам может потребоваться какое-то дополнительное сопоставление. С:

var valid = /^[a-zA-Z0-9][a-zA-Z0-9\-\_]*[a-zA-Z0-9]?$/;

Вы будете совпадать на любом буквенно-цифровом, даже если есть только один символ. Правда, вышесказанное - это то же самое, что просто сказать:

var valid = /^[a-zA-Z0-9][a-zA-Z0-9\-\_]*$/;

Обратите внимание, что оба они потенциально могут совпадать с чем-то вроде a-. Если это не намеченное совпадение (т. Е. Требуется использовать буквенно-цифровой терминатор при использовании дефиса или тире), тогда введите:

var valid = /^[a-zA-Z0-9]([a-zA-Z0-9\-\_]*[a-zA-Z0-9])?$/;

Что говорит: «Найдите один алфавитно-цифровой. Если за ним следуют символы, за ним может следовать ноль или более буквенно-цифровых символов, дефисов или подчеркиваний, если последний символ буквенно-цифровой».

1 голос
/ 07 августа 2010

Ваш первый if проверяет соответствие шаблона независимо от длины. Если это хорошее совпадение, тогда вы проверяете длину. Если нет, вы получите предупреждение «введите правильный шаблон».

Вы хотите сделать это:

if( liveword.length < 3 )
    alert( 'too short' )

else
{
    // check patterns, alert good or bad
}

Редактировать

Ваш код, рефакторинг:

function test(){

    var liveword = document.getElementById("quick").value;
    var valid = /^[a-zA-Z0-9][a-zA-Z0-9\-\_]+[a-zA-Z0-9]$/;
    alert("xxx"+liveword+"xxx");

    if( liveword.length < 3 )
        alert( 'word less than 3' );

    else
    {
        if( liveword.match(valid) )
            alert( 'good match')

        else
            alert( 'bad match' )
    } 

} //close
0 голосов
/ 07 августа 2010

Если if (liveword.match(valid)) завершается успешно, это означает, что слово содержит не менее трех символов, поскольку вашему регулярному выражению требуется не менее трех символов.Поэтому проверка if (liveword.length < 3) никогда не будет успешной, если она находится там, где она есть.Вам необходимо переместить его в предложение else, чтобы проверить длину, если слово не соответствует:

if (liveword.match(valid)) {
    alert ('word 3 or more');
}
else if (liveword.length < 3) {
    alert ('word less than 3');
}
else {
    alert('enter correct pattern');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...