Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.08.2017, 09:53
Новичок на форуме
Отправить личное сообщение для Capitalist Посмотреть профиль Найти все сообщения от Capitalist
 
Регистрация: 22.08.2017
Сообщений: 6

валидация номера телефона
Друзья, вконтактной форме есть несклько полей ввода в однужно одном из них нужно добавить проверку ввода номера телефона.
Использую маску и плагин валидации jquery
Функция валидации
$.validator.addMethod('phonemask', function (value, element) {
    return this.optional(element) || /\([0-9]{3}\)\s[0-9]{3}-[0-9]{2}-[0-9]{2}/.test(value);
});


C проверкой других полей на наличие в них текста все понятно
$(AllInputs).each(function() {
if($.trim(this.value) == '') {
                InputFiled = $(this).parent().find('.label-required').html();
                mistake += '- ' + InputFiled + '\n';
            }
        });
if(mistake.length > 0) {
            alert('Fill the fields please:\n' + mistake);
            return false;


А вот как вшить сюда проверку input с классом .phone по указанной максе уже голову сломал
Подскажите, чем можете )
Ответить с цитированием
  #2 (permalink)  
Старый 22.08.2017, 10:03
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,225

Сообщение от Capitalist
А вот как вшить сюда проверку input с классом .phone
Как вариант...
if ($(this).hasClass('phone ')) {/*...*/};
Ответить с цитированием
  #3 (permalink)  
Старый 22.08.2017, 10:18
Новичок на форуме
Отправить личное сообщение для Capitalist Посмотреть профиль Найти все сообщения от Capitalist
 
Регистрация: 22.08.2017
Сообщений: 6

ksa, спасибо.
немного не так написал
инетерсует как раз момент интеграции в проверку-выдачу сообщения об ошибке ,в том же сообщении , что и при не заполнении других полей. С чем сравнивать? Нужно создать еще одну переменную например mistake1 или как-то можно записхать в ту же mistake?

if(mistake.length > 0) {
	            alert('Fill the fields please:\n' + mistake);
	            return false;
Ответить с цитированием
  #4 (permalink)  
Старый 22.08.2017, 10:53
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,225

Сообщение от Capitalist
Нужно создать еще одну переменную например mistake1 или как-то можно записхать в ту же mistake?
Можно в отдельный,
а можно и в общий...
(с) В.Высоцкий

mistake можно сделать объектом или массивом из двух пустых массивов... В те массивы потом добавлять сообщения...
По окончании проверки, проверять какого типа есть сообщения и задавать им соответствующий заголовок. Потом собственно добавлять те сообщения.
Ответить с цитированием
  #5 (permalink)  
Старый 22.08.2017, 11:34
Новичок на форуме
Отправить личное сообщение для Capitalist Посмотреть профиль Найти все сообщения от Capitalist
 
Регистрация: 22.08.2017
Сообщений: 6

А могу ли я просто сравнивать значение input (.phone).val() == '/\([0-9]{3}\)\s[0-9]{3}-[0-9]{2}-[0-9]{2}' ? обойтись без функции из первого сообщения.

Будет ли так работать?
Ответить с цитированием
  #6 (permalink)  
Старый 22.08.2017, 11:40
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,225

Capitalist, ты понимаешь что пишешь?

Сообщение от Capitalist
input (.phone).val()
Вообще даст ошибку...

Сравнивать строку с номером телефона со строкой, в которой написано регулярное выражение не имеет смысла...
Ответить с цитированием
  #7 (permalink)  
Старый 22.08.2017, 12:21
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Capitalist,
во-первых /\(\d{3}\)\s\d{3}-\d{2}-\d{2}/
во-вторых шаблон можно прописать в атрибут pattern и браузер поддерживающий его при вводе в поле будет произведет нативную проверку
в третьих, поле может иметь атрибут required, и сценарий может производить проверку заполнения таких полей, если браузер не поддерживает нативной и если поле имеет pattern, то по нему и проверять
в четвертых, достаточно проверки булева значения - if(!$.trim(this.value)) ...
Ответить с цитированием
  #8 (permalink)  
Старый 22.08.2017, 17:09
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

мысли вслух: есть $.validator ... зачем ещё какие-то проверки?
Ответить с цитированием
  #9 (permalink)  
Старый 23.08.2017, 16:04
Новичок на форуме
Отправить личное сообщение для Capitalist Посмотреть профиль Найти все сообщения от Capitalist
 
Регистрация: 22.08.2017
Сообщений: 6

laimas, о спасибо большое.
во-первых и во-вторых сделал, работает
"если браузер не поддерживает нативной" это прямо условие можно такое задать?

if(!$.trim(this.value)) - как я понимаю если после удаления пробелов в начале и конце строки, строка не пустая = true то ищем input с pattern? как проверить что строка с регулярным выражением в pattern совпадает?
понимаю что в случае несоответствия выражения с pattern получаем mistake1
меня бы больше устроил как раз предложенный вариант так как заодно в поле эмейл тоже сделал pattern, все прекрасно



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

Последний раз редактировалось Capitalist, 23.08.2017 в 16:34.
Ответить с цитированием
  #10 (permalink)  
Старый 23.08.2017, 17:00
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Capitalist
"если браузер не поддерживает нативной" это прямо условие можно такое задать?
Например, поддержку нативной проверки обязательного заполнения поля можно сделать так:

if(!"required" in document.createElement("input")) {
    //нет поддержки, проверка скриптом
}


Но, например, Apple давно забросил поддержку своего Safari под Windows и хотя этот браузер отвечает, что поддерживается "required", в тоже время с чистой совестью отправит форму и пустым таким полем. То есть кроме этого нужно еще и браузер, и ОС проверить.

Сообщение от Capitalist
if(!$.trim(this.value)) - как я понимаю если после удаления пробелов в начале и конце строки, строка не пустая = true
Наоборот, это условие вернет true, если строка пустая (false), то есть сообщение - "Заполнить!".

А если нет, обязательное поле заполнено, то проверка согласно условию заполнения. В случае если условие описывается шаблоном рег. выражения (это можно узнать как this.pattern), то конструктором RegExp создаем объект регулярного выражения и проверяем:

var re = new RegExp(f[i].pattern);
if(!re.this.value)) {
    //значение не соответствует рег. выражению
}


Вот только почему ваш телефон начинается с (XXX), видимо плагин подставляет первую цифру. Если же проверять по pattern, то в нем должен быть описан полный формат номера.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Варианты форматирования номера телефона AlexTrader Общие вопросы Javascript 15 03.08.2017 15:00
Выбор номера телефона через select и кнопка позвонить Exhaust_ Элементы интерфейса 11 08.08.2016 22:35
Проверка поля номера телефона iskander83 Общие вопросы Javascript 2 14.05.2013 15:22
Проверка номера телефона VetalMan23 Общие вопросы Javascript 14 27.11.2012 12:42
Проверка номера телефона при помощи регулярок Amateur Javascript под браузер 3 20.10.2011 13:34