Способов валидации форм на стороне клиента, а именно поля ввода номера телефона (инпута) существует несколько, как и на стороне сервера. Для этих целей существуют специальные jQuery плагины, типа Inputmask, которые легко подключить и легко использовать. Но в этой статье мы их рассматривать не будем, а будем производить валидацию телефона при помощи регулярного выражения и совсем маленькой функции, которую можно будет использовать в последующем и других проектах. Для демонстрации предлагаю посмотреть и протестировать пример.
Самое основное в этом деле — регулярное выражение (regex), которое, к счастью, не нужно придумывать самому, а просто взять готовое и внедрить. Сразу скажу, что данная регулярка проверяет российские номера телефонов. Первая конструкция, которую мы рассмотрим, выглядит так:
1
2
3
4
5
6
7
8
let regex =/^(\+7|7|8)?[\s\-]?\(?[489][0-9]{2}\)?[\s\-]?[0-9]{3}[\s\-]?[0-9]{2}[\s\-]?[0-9]{2}$/;
let phone ='89000000000';// дальше идет проверка на соответствие выражениюif(!regex.test(phone){
console.log('Не соответствует');}else{
console.log('Соответствует');}
let regex = /^(\+7|7|8)?[\s\-]?\(?[489][0-9]{2}\)?[\s\-]?[0-9]{3}[\s\-]?[0-9]{2}[\s\-]?[0-9]{2}$/;
let phone = '89000000000';
// дальше идет проверка на соответствие выражению
if(!regex.test(phone){
console.log('Не соответствует');
}else{
console.log('Соответствует');
}
То же самое можно записать в функцию валидации и вызывать ее где угодно в коде.
1
2
3
4
5
6
7
8
9
10
11
12
function validatePhone(phone){
let regex =/^(\+7|7|8)?[\s\-]?\(?[489][0-9]{2}\)?[\s\-]?[0-9]{3}[\s\-]?[0-9]{2}[\s\-]?[0-9]{2}$/;return regex.test(phone);}// Вызов функции
let phone ='89000000000';if(!validatePhone(phone)){
console.log('Не соответствует');}else{
console.log('Соответствует');}
function validatePhone(phone){
let regex = /^(\+7|7|8)?[\s\-]?\(?[489][0-9]{2}\)?[\s\-]?[0-9]{3}[\s\-]?[0-9]{2}[\s\-]?[0-9]{2}$/;
return regex.test(phone);
}
// Вызов функции
let phone = '89000000000';
if (!validatePhone(phone)){
console.log('Не соответствует');
}else{
console.log('Соответствует');
}
Теперь немного о том, для каких номеров будет происходить валидация, ведь один и тот же номер можно написать в разных форматах и очень важно сделать все правильно и протестировать на работоспособность иначе можно столкнуться с тем, что номера телефонов будут приходить в неверном формате и по ним невозможно будет дозвониться, а это уже потеря потенциальной прибыли и прямые убытки. Вот все форматы, которые пройдут валидацию:
Здесь все в точности то же самое, но пройдемся по HTML коду и разберем по полочкам все элементы, чтобы было более понятно. Допустим у нас есть вот такой инпут:
<inputtype="tel"class="input"/>
<input type="tel" class="input"/>
Затем пишем jQuery код.
1
2
3
4
5
6
7
let phone = $('.input').val();// Получаем значение input
let regex =/^(\+7|7|8)?[\s\-]?\(?[489][0-9]{2}\)?[\s\-]?[0-9]{3}[\s\-]?[0-9]{2}[\s\-]?[0-9]{2}$/;if(!regex.test(phone){
console.log('Не соответствует');}else{
console.log('Соответствует');}
let phone = $('.input').val(); // Получаем значение input
let regex = /^(\+7|7|8)?[\s\-]?\(?[489][0-9]{2}\)?[\s\-]?[0-9]{3}[\s\-]?[0-9]{2}[\s\-]?[0-9]{2}$/;
if(!regex.test(phone){
console.log('Не соответствует');
}else{
console.log('Соответствует');
}
Обычно валидация поля с телефоном происходит при отправке Ajax запроса без перезагрузки страницы. данный способ подойдет, если в форме есть всего несколько полей, к примеру имя и телефон. Если полей много и для каждого требуется проверка на корректность заполнения, то здесь лучше подключить соответствующий плагин, чтобы не изобретать велосипед и не писать кучу кода с нуля. Надеюсь, что все было понятно, если что — пишите комменты.
Можно написать номер без закрытой скобочки, и он отметится как правильный….по идее, если скобочка то надо закрыть через сколько то символов ее….слабовата в итоге проверка, но так то не плохая… Если знаете как исправить — буду признателен )
Можно написать номер без закрытой скобочки, и он отметится как правильный….по идее, если скобочка то надо закрыть через сколько то символов ее….слабовата в итоге проверка, но так то не плохая… Если знаете как исправить — буду признателен )
Скобки значения не имеют. Главное цифры!
какая-то неправильная регулярка. полагаю, что должна быть: regex = /^(\+7|7|8)?[\s\-]?\(?[0-9]{3}\)?[\s\-]?[0-9]{3}[\s\-]?[0-9]{2}[\s\-]?[0-9]{2}$/;