Проверка нескольких входных значений через регулярное выражение не работает

0

Я пытаюсь проверить несколько полей ввода, сначала проверив, если он пуст, а затем, если это числовое ненулевое значение. Это HTML-код:

<section style="" id="variations_holder">
    <div class="con_var">
        <input type="text" class="pupc" name="variation[pupc][]">
        <input type="text" class="pprice" name="variation[pprice][]">
        <input type="text" class="pqty" name="variation[pqty][]">

        <input type="text" class="pupc" name="variation[pupc][]">
        <input type="text" class="pprice" name="variation[pprice][]">
        <input type="text" class="pqty" name="variation[pqty][]">
    </div>
</section>

Сейчас есть только два набора входных данных, но может быть три или более, например:

<section style="" id="variations_holder">
    <div class="con_var">
        <input type="text" class="pupc" name="variation[pupc][]">
        <input type="text" class="pprice" name="variation[pprice][]">
        <input type="text" class="pqty" name="variation[pqty][]">

        <input type="text" class="pupc" name="variation[pupc][]">
        <input type="text" class="pprice" name="variation[pprice][]">
        <input type="text" class="pqty" name="variation[pqty][]">

        <input type="text" class="pupc" name="variation[pupc][]">
        <input type="text" class="pprice" name="variation[pprice][]">
        <input type="text" class="pqty" name="variation[pqty][]">
    </div>
</section>

Поскольку они генерируются динамически. Теперь это код jQuery, который я сделал для проверки того, что я сказал ранее:

$('#variations_holder input.pprice').each(function() {
    pprice = $(this).val();
    if (!$.trim(this.value).length) {
        alert($(this).prev('label').text() + ' no se puede dejar vacío!!!');
        $(this).focus();
        is_valid = false;
        return false;
    } 

    if (pprice.match('^[1-9]\d*$') === false) {
        pprice.addClass('error');
    }
});

Но он не работает по следующим причинам:

  • Проверяйте только первое поле, а не остальное
  • Не проверяет регулярное выражение, поскольку проверка выполняется даже если я пишу буквы вместо цифр

Что не так?

Теги:
validation

1 ответ

1
Лучший ответ
  • return вами, возвращается из обратного вызова, который вы передаете each и, когда вы возвращаете false, он прерывает цикл.
  • match никогда не возвращает false. Используйте вместо этого тест.
  • вы пытаетесь добавить класс к pprice, который является строкой.

Вы можете исправить это следующим образом:

var is_valid = true;
$('#variations_holder input.pprice').each(function() {
    pprice = $.trim(this.value);
    if (!pprice.length) {
        alert($(this).prev('label').text() + ' no se puede dejar vacío!!!');
        $(this).focus();
        is_valid = false;
    } else if (!/^[1-9]\d*$/.test(pprice)) {
        $(this).addClass('error');
        is_valid = false;
    }
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню