Валидация e-mail

Тема в разделе "Ошибки и их решения", создана пользователем ambalocha69, 11 ноя 2015.

  1. ambalocha69

    ambalocha69 Пользователь

    Сообщения:
    61
    Симпатии:
    12
    Встроенный в Опенкрат валидатор e-mail на основе регулярного выражения
    !preg_match('/^[^\@]+@.*.[a-z]{2,15}$/i'
    весьма убогий и не пропускает большое кол-во адресов:
    - содержащих 2 и более точки в имени пользователя типа ivanov.ivan.1975@yandex.ru
    - принадлежащие новым доменным зонам, таким как .zone, .market, .moscow и т.п
    Реально работающее регулярное выражение выглядит так:
    Код:
    /^(?!(?:(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?)){255,})(?!(?:(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?)){65,}@)(?:(?:[\.\x21\x23-\x27\x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22))(?:\.(?:(?:[\.\x21\x23-\x27x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-+[a-z0-9]+)*\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-+[a-z0-9]+)*)|(?:\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\]))$/iD
    Источник: http://pastebin.com/AsuRG46e
    Не мешало бы в модуле настройки магазина наряду с ключом шифрования сделать возможность указания собственного регулярного выражения.
     
    Последнее редактирование модератором: 13 ноя 2015
    optimlab и Vlad нравится это.
  2. Vlad

    Vlad Эксперт

    Сообщения:
    4.151
    Симпатии:
    1.006
    Выглядит круто )) Если что, пользуйтесь тегами code

    я думаю просто в модификтор добавить. Но ведь менять везде придется, и в настройках, и в регистрации и еще где нибудь.

     
  3. ambalocha69

    ambalocha69 Пользователь

    Сообщения:
    61
    Симпатии:
    12
    Да, в Опенкарте собственная функция validate в куче модулей. Надо их всех оптом одним модификатором по regex найти и заменить.
     
  4. Vlad

    Vlad Эксперт

    Сообщения:
    4.151
    Симпатии:
    1.006
    надо даниелю написать, чтобы выделил в отдельную библиотеку, тогда проще будет. Заменил в одном файле и все.
     
  5. ambalocha69

    ambalocha69 Пользователь

    Сообщения:
    61
    Симпатии:
    12
    мы люди русские и живем по правилу: на бога надейся, а сам не плошай :)
    нужно сделать модификатор который по regex найдет в коде все валидаторы и откорректирует их
    и раз уж на то пошло, то родной валидатор (('/^[^\@]+@.*.[a-z]{2,15}$/i') напрочь отсекает все кириллические домены, на что Даниэлю скорее всего плевать с высоты какой нибудь башни в Нью-Йорке, или где он там обитает
     
  6. Ален

    Ален Эксперт

    Сообщения:
    2.056
    Симпатии:
    641
    интересно, а что я делаю не так? Беру емайл gfg.fjg.gh@kmiko.moscow и валидация проходит. ))
     
  7. ambalocha69

    ambalocha69 Пользователь

    Сообщения:
    61
    Симпатии:
    12
    проходит где? версия?
     
  8. Ален

    Ален Эксперт

    Сообщения:
    2.056
    Симпатии:
    641
    2.1
    В любом случаи кириллица не пройдет, так что по любому надо делать.
     
  9. Romans

    Romans Administrator Команда форума

    Сообщения:
    1.453
    Симпатии:
    787
    ему не на все плевать и не всегда. На данный момент данной задачей озабочен, и ищет варианты решения.
    Ваша регулярка это не универсальное решение, а лишь уточнение стандартов по валидации емайл. Емайлы национальных доменов регулярное выражение выше не поддерживает. В общем ищем решения...
     
    Zlata Jesen нравится это.
  10. ambalocha69

    ambalocha69 Пользователь

    Сообщения:
    61
    Симпатии:
    12
    Это реально радует!
     
  11. klaus_sv

    klaus_sv Новичок

    Сообщения:
    5
    Симпатии:
    0
    Я столкнулся с похожей проблемой в OC2.3
    Создаю пользователя в админке, а email не проходит валидацию. Причём у мыла домен gmail.com, если меняю gmail.ru - то всё нормально.
    Заглянул в контроллер - а там нет регулярного выражения для проверки, а просто вставлена на функция FILTER_VALIDATE_EMAIL.

    Скорее всего и в пользовательской части такая-же ситуация

    Как тут быть, ума не приложу
     
  12. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    685
    написать свой метод валидации, и проверять только наличие символа "at"
     
  13. klaus_sv

    klaus_sv Новичок

    Сообщения:
    5
    Симпатии:
    0
    А куда его писать-то? Если в старой версии OC валидация была очевидно и можно было поправить файл в системах, то сейчас мне получается по всему опенкарту отлавливать эту функцию, выкидывать её, и вставлять свою валидацию? Сильно хлопотно и можно пропустить что нибудь.
     
  14. karpov

    karpov Продвинутый пользователь

    Сообщения:
    1.524
    Симпатии:
    243
    Они все одинаковые. Просто в нотепд++ замена по всем файлам сделать или окмодом попробовать