@pilolin
HTML программист

Маска телефона в поле input?

В сети не составляет труда найти плагин для JQuery набора телефона по маске, остается только подключить сам JQuery и прописать $('[type='tel']').mask('+7 (999) 999-99-99'). Но кривые пользователи набирают всеровно телефон с 7 из чего следует, что номер приходит неверный (не хватает последней цифры). Как можно доработать его или может есть другое решение какое-то (другой плагин или поставить проверку перед сабмитом)?
  • Вопрос задан
  • 12317 просмотров
Решения вопроса 2
Vlad_IT
@Vlad_IT Куратор тега JavaScript
Front-end разработчик
Сделать код +7 через select, в котором можно даже флажки вывести, и пусть у него значение по умолчанию будет +7. А остальные цифры (999) 999-99-99 вывести в Input с маской, как вы и выводите (только без +7). Это самый простой и безпоследственный вариант.
Ответ написан
@pilolin Автор вопроса
HTML программист
Решили проблему добавлением одного дополнительного символа необязательного в маску.

$(".mask-phone").mask('+79999999999?9', {placeholder: ''});
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 5
@AlexProWeb
Вот мое решение
<input type="tel" name="phone" maxlength="16" placeholder="+7(___)___-__-__"  id="phone"/>
<input type="tel" name="phone" maxlength="16" placeholder="+7(___)___-__-__"  id="phone2"/>

//------------javaScript--------------------------------
//подключение к текстовому полю
document.querySelector('#phone').onkeydown = function(e){
inputphone(e,document.querySelector('#phone'))
}
document.querySelector('#phone2').onkeydown = function(e){
inputphone(e,document.querySelector('#phone2'))
}
//-- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --


//Функция маски формат +7 (
function inputphone(e, phone){
function stop(evt) {
    evt.preventDefault();
}
let key = e.key, v = phone.value; not = key.replace(/([0-9])/, 1)

if(not == 1 || 'Backspace' === not){
if('Backspace' != not){ 
    if(v.length < 3 || v ===''){phone.value= '+7('}
    if(v.length === 6){phone.value= v +')'}
    if(v.length === 10){phone.value= v +'-'}
     if(v.length === 13){phone.value= v +'-'}
    }
}else{stop(e)}  }
Ответ написан
Сделать обычное текстовое поле.
Многие не пишут ничего а копируют, у них вбит в блокнотике телефон через 7, через 8 или вообще городской и они его втыкают.
Зачем усложнять им жизнь, да и себе? :)
Я так раз пьяный перевел деньги на номер с 77, и не очень люблю эти маски ....
Неужели если вам придет телефон в другом формате, вы не поймете?

Еще как вариант, это подать сигнал звуковой, если цифр больше чем должно быть.
Ответ написан
kasheibess
@kasheibess
веб уже не тот
$('[type='tel']').mask('+9 (999) 999-99-99'). По крайней мере в последнем проекте после тестов было решено изменить маску именно на такую
Ответ написан
Комментировать
sergski
@sergski
web-developer
Нужно разбирать введеные пользователем данные. Например пользователь копипастит +7 495 123-45-67 или +7(495) 1234567 и тп. Вам нужно найти и удалить "+7", пробелы, дефисы, скобки, чтобы осталось только цифры -- код и номер. Их и вставляете, если цифр осталось 10. Если меньше, выводите сообщение проверить номер.
Т.е. у вас в форме не должно в принципе вывестись такое: +7+749512345 или +7+7(495)123 или +7+7(495) 12 и тп. Если вводит с клавиатуры не должны вводится плюсы скобки, дефисы, -- только цифры.
Ответ написан
Комментировать
@DanKud
А чем не вариант вешать событие .keypress() и фильтровать введенные данные обрезая первые +7 или 7. Но есть нюанс еще в том, что +77.. это казахстанские номера, в теории такой номер тоже на российском сайте тоже может всплыть.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы