JQuery RegEx Validation

Я хочу проверить, имеет ли поле ввода атрибут «шаблон» и если это так, то перед проверкой регулярных выражений добавьте указанный шаблон. Я знаю, что это уже сделано в HTML5, но я хочу обработать событие самостоятельно. Я получаю эту ошибку:Uncaught TypeError: Object a-zA-Z has no method 'test'

<code> ///Check Perform Reg///////////////////////////////////////////////////////
         if ($(this).attr("pattern")) {
             var reg = $(this).attr("pattern");
             var currentValue = $(this).val();


             if (reg.test(currentValue)) {
                 $(this).after($error.clone().text("Invalid Input.Try Again."));
                 $(".error:hidden").fadeIn("slow");
                 hasError = true;
                 return false;
             }

             }
        ///////////////////////////////////////////////////////////////////////////
</code>

Все еще не повезло,

Также вот мой HTML:

<code><div>
    <input class="formInput" name="First Name" pattern="^[A-Za-z_-][A-Za-z0-9_-]*$" type="text"  id="frmFirst" min="2" maxlength="30"  required="required"/>
    <span>First Name</span>
</div>
</code>

Ответы на вопрос(5)

Ниже приведен правильный способ проверки текстового поля на основе регулярного выражения с использованием Jquery в MVC. Обратите внимание, что это выражение сделано для проверки нескольких адресов электронной почты в одной строке:

      var emailReg = new RegExp(/^([A-Z0-9.%+-][email protected]@[A-Z0-9.-]+.[A-Z]{2,6})*([,;][\s]*([A-Z0-9.%+-][email protected]@[A-Z0-9.-]+.[A-Z]{2,6}))*$/i);
      var emailText = $('#email').val();

      if (!emailReg.test(emailText)) {
          alert('Wrong Email Address\Addresses format! Please reEnter correct format');
            return false;
        }
    }
 20 янв. 2016 г., 20:19
Jquery везде одинаков. Вам просто нужно применить его к текстовому полю или полю ввода, где вы хотите проверить соответствие этому выражению jquery.

Строка не являетсяRegExp объект. Вы можете использовать что-то вроде:

var reg = new RegExp($(this).attr("pattern"));
 user126553306 апр. 2012 г., 15:02
все еще не повезло ..

Вы можете попробовать что-то вроде этого. Он выдаст предупреждение «ошибка var2».

var var1 = "1";
var var2 = "A";
var myRegEx = new RegExp('[0-9]+'); //make sure the var is a number

if (var1 != myRegEx.exec(var1)) {
    alert("var1 failed");
}

if (var2 != myRegEx.exec(var2)) {
    alert("var2 failed");
}

Как уже упоминалось другими, вам нужно использовать объект вместо строки, возвращаемой методом jQuery attr (). Вы можете увидеть разницу между ними здесь.

Вернет & quot; строку & quot ;:

var reg = $(this).attr("pattern");
console.log(typeof reg)

Вернется с & quot; объектом & quot ;:

var reg = new RegExp($(this).attr("pattern"));
console.log(typeof reg);

Так что если вы замените:

var reg = $(this).attr("pattern");

С:

var reg = new RegExp($(this).attr("pattern"));

Uncaught TypeError: Object a-zA-Z has no method 'test' ошибка исчезнет

... но ваша проверка по-прежнему не будет работать очень хорошо. Ваша условная логика говорит, что если тест регулярного выражения возвращает TRUE, тогда обработать ошибку:

if (reg.test(currentValue)) {
    //error handling
}

Вместо этого он должен обработать ошибку, если тест возвращает FALSE:

if (!reg.test(currentValue)) {
    //error handling
}

Это должно работать для вас.

Обычно регулярное выражение с дескриптором javascript / jquery, как

var reg = /pattern/;
if (reg.test($(this).val())) {
    // perform some task
}
 06 апр. 2012 г., 06:19
да, это выглядит так же, для регулярного выражения вам нужно заключить шаблон в / [шаблон] / например, / test / для сопоставления со значением test.
 user126553306 апр. 2012 г., 06:13
Кажется, это то же самое, что мой код уже делает. за исключением того, что шаблон передается от переменной

Ваш ответ на вопрос