Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Как запретить отправлять обрезанный номер телефона? (https://javascript.ru/forum/jquery/75985-kak-zapretit-otpravlyat-obrezannyjj-nomer-telefona.html)

giwuf 22.11.2018 15:03

Как запретить отправлять обрезанный номер телефона?
 
Всем привет! Есть сайт на wordpress с формой отправки.
Для ввода телефона по маске установлена библиотека
masked-input-plugin.js

Формирую ее таким образом
$(document).ready(function () {
$('.fphone').mask('+7(999)-999-99-99');
});


Сама маска работает хорошо, но проблема возникает, когда кто-то начинает вводить скажем номер с 8ки, после этого не проверяет, а сразу нажимает кнопку отправить и в итоге телефон на почту приходит обрезанный, т.е. форма считает, что в поле все введено правильно и допускает не полное заполнение маски.

Форма реализована с помощью плагина contact form 7, я переопределяю его проверку номера вот так в файле
functions.php

// define the wpcf7_is_tel callback 
function custom_filter_wpcf7_is_tel( $result, $tel ) { 
  $result = preg_match( '^\+?[78][-\(]?\d{3}\)?-?\d{3}-?\d{2}-?\d{2}$', $tel );
  return $result; 
}
         
add_filter( 'wpcf7_is_tel', 'custom_filter_wpcf7_is_tel', 10, 2 );


Но, в результате, каждый раз пишет "некорректный номер телефона"

Перепробовал много вариантов, в том числе и регулярок, но пока к верному решению не пришел.

Nexus 22.11.2018 15:05

Не катит?
$(document).ready(function () {
    $('.fphone').mask('+9(999)-999-99-99');
});

giwuf 22.11.2018 16:16

Цитата:

Сообщение от Nexus (Сообщение 499114)
Не катит?
$(document).ready(function () {
    $('.fphone').mask('+9(999)-999-99-99');
});

да нет.. вообще тогда проверка не срабатывает - отправляй хоть телефон с любой цифры, хоть с +3 и обрезанный

Nexus 22.11.2018 16:42

$(document).ready(function() {
    $('.fphone').mask('+7(999)-999-99-99').on('input',function(){
      if(+this.value.replace(/\D+?/g,'').substr(1,1)===8)
        alert('Achtung!');
    });
});

giwuf 22.11.2018 16:59

Nexus,
а что мы этим решением хотим добиться? Что-то я не догоняю.
Теперь если вводим телефон с 8ки - он на каждую введенную цифру ругается алертом, а если с 7ки, то по-прежнему благодарит за отправку обрезанного телефона.. причем, если ввести только 3 цифры, то ругнется на то, что поле слишком короткое, а вот больше - скушает запросто!

Nexus 22.11.2018 17:07

giwuf, то ли я дебил, то ли у вас маска не работает.
Если пользователь первой цифрой введет восьмерку, то она (если маска работает) станет второй цифрой в номере телефона.
Скрипт проверяет вторую цифру в номере телефона и, если это восьмерка, вызывает alert.
Вместо alert'а запретите форме отправляться и готово.

Цитата:

Сообщение от giwuf
если ввести только 3 цифры, то ругнется на то, что поле слишком короткое, а вот больше - скушает запросто!

Значит я все таки не дебил.

giwuf 22.11.2018 18:35

Цитата:

Сообщение от Nexus (Сообщение 499159)
giwuf, то ли я дебил, то ли у вас маска не работает.
Если пользователь первой цифрой введет восьмерку, то она (если маска работает) станет второй цифрой в номере телефона.
Скрипт проверяет вторую цифру в номере телефона и, если это восьмерка, вызывает alert.
Вместо alert'а запретите форме отправляться и готово.


Значит я все таки не дебил.

Nexus, да, спасибо, с 8 стало яснее - не отправляет пока не введешь до конца, но при этом с семеркой возможна отправка обрезанного номера..

В итоге плюнул, вырезал из темы библиотеку с проверкой и установил плагин https://ru.wordpress.org/plugins/cf7-phone-mask-field/ и все решилось. Спасибо за помощь!


Часовой пояс GMT +3, время: 01:07.