валидация телефоного номера

215
14 марта 2017, 15:32

написал код для валидации поля - мобильного телефона, но нашёл проблему, при заполнение например 12345 - работает отличтно, 1234п - выдает ошибку, но вот если после буквы поставить снова цифру - 1234п5, то скрип продолжает работать как будто там одни числа, как можно это исправить что можно было вводить только цифры? html:

<div class="form-field">
                        <input type="tel" name="phone" placeholder="Ваш телефон">
                        <p class="error" id="telError">Это поле обязательное для заполнения</p>
                        <p class="error" id="telErrorTwo">Некорректный ввод</p>
                    </div>

Js:

document.consaltform.phone.onkeyup = function() {
            var name = document.consaltform.phone.value;
            if (name === "") {
                document.consaltform.phone.removeAttribute("class", "ready");
                document.getElementById("telError").style.display = "block";
                document.getElementById("telErrorTwo").style.display = "none";
            } else {
                document.getElementById("telError").style.display = "none";
                var pattern = new RegExp("[- +()0-9]+$");
                var isValid = this.value.search(pattern) >= 0;
                if (!(isValid)) {
                    document.getElementById("telErrorTwo").style.display = "block";
                } else {
                    document.getElementById("telErrorTwo").style.display = "none";
                    document.consaltform.phone.setAttribute("class", "ready");
                }
            }
        }; 
Answer 1

Это потому, что ваша регулярка проверяет только окончание значения поля:

new RegExp("[- +()0-9]+$")

Чтобы тестировать совпадение поля целиком, нужно добавить якорь начала строки:

new RegExp("^[- +()0-9]+$")

Хотелось бы отметить, что это очень слабое выражения для телефона.
Например, вот список валидных номеров:

  • -
  • ----
  • )-+-(

Возможно вам следует описать ваше выражение более детально.

Answer 2

Советую обратить внимание на вот этот валидатор. Думаю он решит вашу проблему весьма быстро или хотите все-таки осилить данный скрипт?

https://jqueryvalidation.org/

READ ALSO
TypeError: Cannot read property &#39;toLowerCase&#39; of null Angular

TypeError: Cannot read property 'toLowerCase' of null Angular

Вот такая ошибка в консолиВот код фильтра

286
самый глупый вопрос

самый глупый вопрос

Стыдно за вопрос, но как разделить две функции

154
Вывод элементов после сортировки Redux

Вывод элементов после сортировки Redux

Есть вот такой смарт компонент

202
Как изменять цвет текста в зависимости от результатов AJAX

Как изменять цвет текста в зависимости от результатов AJAX

У меня есть стандартный AJAX (Без всяких JQuery)Функция, которая записывает полученный ответ в нужное мне поле выглядит так:

180