Поле для ввода номера телефона на чистом JS

900
22 марта 2017, 18:01

Здравствуйте, хочу сделать поле для ввода номера телефона, при нажатии на поле появлялся +, как первый знак, после чего можно было ввести еще 12 чисел, и нельзя писать числа перед плюсом и удалять плюс, код на чистом(ванильном) JS, через .mask нашел (Как в поле ввода номера задать регулярное выражение для укр. телефона со статическими +380 ....?), но ради одного кода не хочу подключать библиотеку...

<form action="">
        <input type="text" name="tel"  placeholder="Номер телефона" required max="13" id="tel">
    </form>
Answer 1

Ну... Валидация формата может быть весьма нетривиальной задачей, так что, возможно, отдельный плагин, вылизанный кучей народа, может быть весьма кстати.

let inp = document.querySelector('#tel'); 
 
// Проверяем фокус 
inp.addEventListener('focus', _ => { 
  // Если там ничего нет или есть, но левое 
  if(!/^\+\d*$/.test(inp.value)) 
    // То вставляем знак плюса как значение 
    inp.value = '+'; 
}); 
 
inp.addEventListener('keypress', e => { 
  // Отменяем ввод не цифр 
  if(!/\d/.test(e.key)) 
    e.preventDefault(); 
});
input:focus{outline: none;}
<form action=""> 
  <!-- Ограничение на длину: maxlength --> 
  <input type="text" name="tel" placeholder="Номер телефона" required maxlength="13" id="tel"> 
</form>

Answer 2

var inp = document.getElementById("inp"); 
 
inp.onclick = function() { 
    inp.value = "+"; 
} 
 
var old = 0; 
 
inp.onkeydown = function() { 
    var curLen = inp.value.length; 
     
    if (curLen < old){ 
      old--; 
      return; 
      } 
     
    if (curLen == 2)  
    	inp.value = inp.value + "("; 
       
    if (curLen == 6) 
    	inp.value = inp.value + ")-"; 
       
     if (curLen == 11) 
    	inp.value = inp.value + "-";  
       
     if (curLen == 14) 
    	inp.value = inp.value + "-";   
       
     if (curLen > 16) 
    	inp.value = inp.value.substring(0, inp.value.length - 1); 
       
     old++; 
}
<form><input id="inp"></input></form>

READ ALSO
Сравнение двух json-объектов и добавление недостающих элементов

Сравнение двух json-объектов и добавление недостающих элементов

Есть два json-объекта с разным количеством элементовВ первом, допустим, 6 элементов с ключом segment, а во втором - 8

381
Как в Trampermonkey выбрать и кликнуть по options в select

Как в Trampermonkey выбрать и кликнуть по options в select

Очень бы хотелось, чтобы скрипт автоматом выбирал из выпадающего списка "Компьютеры"

360
react-hot-loader в Gulp

react-hot-loader в Gulp

Добрый день! Стоит задача писать проект на ReactJS в GulpПытаюсь найти хоть какую нибудь информацию по hot load для Gulp и пока ничего не нашел

266
Как отловить нажатие по кнопке: буквы, цифры, знаки препинания на любой раскладке

Как отловить нажатие по кнопке: буквы, цифры, знаки препинания на любой раскладке

Как обработать событие нажатия по кнопке, только если нажата буква или цифра, или знак препинания, при нажатии на русской или английской раскладке?

215