FormIt + AjaxForm - валидация телефона

Приветствую.
Подскажите, разве formit (ну или обёртка ajaxform) не умеют проводить валидацию поля phone именно на содержимое, поле обязательное, но валидацию проходит, даже если любую букву вписать.
Скаут
28 июня 2017, 18:43
modx.pro
1
9 283
0

Комментарии: 12

Hetzerok
28 июня 2017, 23:12
+1
Стандартного валидатора на телефон нет, насколько я помню, но всегда же можно сделать любой кастомный валидатор https://docs.modx.com/extras/revo/formit/formit.validators
    Скаут
    29 июня 2017, 12:47
    0
    оу, не знал, правда для меня это тяжкая задача (программировать то не умею).
    Вообще вопрос небольшой не по теме: вот использую эту связку, как можно заменить текст стандартных сообщений (которые выдаёт именно FormIt), не трогая словари? Я про «это поля обязательно...»
      Hetzerok
      29 июня 2017, 13:27
      +1
      https://docs.modx.com/extras/revo/formit/formit.validators#FormIt.Validators-CustomErrorMessages
      &vTextRequired
      задает сообщение для любого поля, проверяемого на reqired
      &phone.vTextRequired
      задает сообщение для поля phone, проверяемого на required
        Скаут
        29 июня 2017, 19:46
        0
        спасибо большое, только у меня почему-то текст ошибки для телефона показывается ещё и под капчей (recaptchaV2). для каптчи как-то можно задать текст, у неё же нет идентификаторов никаких?
          Скаут
          29 июня 2017, 21:45
          0
          смог привести всё к более менее желаемому виду так:
          [[!AjaxForm? 
            &form=`tpl.AjaxForm.Feedback` 
            &snippet=`FormIt` 
            &hooks=`recaptchav2,email`
            &emailSubject=`тема`
            &emailTo=`почта`
            &emailTpl=`tpl.Email`
            &validate=`name:required:minLength=^2^,phone:required:isNumber,g-recaptcha-response:required`
            &validationErrorMessage=`В форме содержатся ошибки!`
            &successMessage=`Спасибо за обращение<br />Мы скоро свяжемся с вами`
            &vTextRequired=`Необходимо поставить галочку`
            &vTextIsNumber=`Номер состоит из цифр`
            &phone.vTextRequired=`Укажите Ваш телефон`
            &name.vTextRequired=`Укажите Ваше имя. `
            &vTextMinLength=`Не менее 2 букв`
          ]]
        Hetzerok
        29 июня 2017, 13:46
        +1
        А по поводу кастомного валидатора — для проверки номера вида +7 (XXX) XXX-XX-XX простейший валидатор будет выглядеть так:
        <?php
        $success = false;
        if (!preg_match('/^\+7 \(\d{3}\) \d{3}-\d{2}-\d{2}$/g') { 	
          $validator->addError($key, 'Неверный формат номера телефона!');
        } else {
          $success = false;
        }
        return $success;
          Скаут
          29 июня 2017, 19:50
          0
          спасибо)
            Скаут
            29 июня 2017, 21:49
            0
            оказывается параметр isNumber может помочь для валидации поля с номером.
            там есть ещё параметр regexp, кажется в него можно занести ваш фильтр "/^\+7 \(\d{3}\) \d{3}-\d{2}-\d{2}$/g"
            но не пробовал.
            От спама как бы рекаптча стоит, а для людей уже jquery плагин, о котором писали ниже. Он на IE<10 не работает правда, но там уже пусть хоть в каком-нибудь формате уже телефон укажут, раз до сих пор на IE9 )))
        Сергей
        29 июня 2017, 00:44
        0
        советую поставить такую вещь как maskedinput
        За ввод отвечает скрипт maskedinput.js который в свою очередь дает ввести только номер телефона в международном формате с +7…
        Буквы ввести ты не сможешь, ввести неправильный(короткий) номер так же не сможешь, соответственно это защищает неплохо от спама т.к роботы не могут ввести это поле, в AjaxForm пишешь phone:requiredи получешь т о что хотел.
        Ссылок здесь писать не буду погугли эту тему, в нете много уроков)) Удачи
          Скаут
          29 июня 2017, 12:45
          0
          Да, про этот плагин к jquery знаю, сам его юзал на другом проекте (другой cms), думал лучше проверку на стороне сервера, но в итоге эту штуку приделал.
          Hetzerok
          29 июня 2017, 13:29
          0
          Такой плагин не даст гарантии что номер телефона придет к вам в нужном формате, так как любую проверку на фронтенде можно запросто обойти — было бы желание.
            Сергей
            29 июня 2017, 14:12
            -1
            Вопрос стоял вот так
            но валидацию проходит, даже если любую букву вписать.
            Помоему я дал ответ на данный вопрос) зачем усложнять жизнь?
            Вопрос стоит в том для чего автору данная штука? Если против спама, тогда прикрутите в дополнение гугл капчу.
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            12