- RU.PHP ------------------------------------------------------------- RU.PHP -
Msg : #1043 [1443]
От : Konstantin Boyandin 2:5020/175.2 26 июня 03, 04:32
Кому : val khokhlov 26 июня 03, 22:23
Тема : Почемy нe фypычит фyнкция
-------------------------------------------------------------------------------
From: "Konstantin Boyandin"
Приветствую, val khokhlov!
KB>> Точная и исчерпыавющая проверка, включающая в т.ч. попытку
KB>> "поговорить" с SMTP и выяснить, что адрес письма принимает - хороша,
KB>> когда всё это должно обрабатываться автоматически.
vk> к сожалению, это практически невозможно. почти все запрещают
vk> vrfy. а многие и вывод сообщения об отсутствующем юзере сразу
vk> smtp-клиенту. так что, имхо, не получится и автоматизировать. куда лучше
vk> делать схему с подтверждением.
Развитие темы - как проверять, есть ли в природе указанный email адрес. То
есть, немного иная степь, первоначально спрашивали только про RE.
Аатоматизация, на самом деле, возможна - правда, через понятно что, именно
в связи с тем, что проверку через SMTP делать удаётся крайне редко. Отправить
тестовое (регистрационное) письмо, ловить, если будет, ответ с руганью (кодом
5xx) и "анализировать это".
Третий вариант, самый удобный - не изучать отлупы и просто ставить знак:
"не подтверждено". Далее - в соответствии с логикой того, для чего нужен email
в данном конкретном случае.
vk> насчет сложные re мое мнение - это ни к чему. проверять
vk> валидность ай-пи через re как-то несерьезно. лучше (и, может, быстрее)
vk> сделать /(\d+)\.(\d+)\.(\d+)\.(\d+)/, а потом проверить числа в
vk> результатах.
Hесерьёзно? Сравни производительность обоих вариантов и положи сюда
итоги... Я не уверен, что быстрее (по времени). Правда, если нужно отсеивать
диапазоны адресов, то, IMO, использовать для этого сложные RE уже извращение
и, действительно, надо разбить адрес на четыре числа и "далее вручную".
vk> еще совет - \d выглядит красивее [0-9], \w - [A-Za-z0-9_]; их
vk> можно комбинировать с перечислениями (т.е. [\w.-])
\d выглядит короче, чем [0-9], а вот насчёт \w есть два возражения:
- для компонент доменного имени не подходит (подчёркивание недопустимо)
- точное значение \w привязано к локали и *не* является, строго говоря,
синонимом [a-zA-Z0-9_] (PHP manual, Pattern Syntax)
KB>> Часто вместо 600-символьного регекспа проще, надежнее и производительнее
KB>> заюзать дедовские методы - for / switch ...
^^^ это не я сказал. :)
vk> нужно еще учесть, что re - это ресурсоемкая вещь. куда лучше
vk> сделать первичный парсинг на re, а затем дейстовать по обстановке (т.е.
vk> два простых re лучше, чем один сложный).
Ресурсоёмкая - это всегда по отношению к. В каждом конкретном случае имеет
смысл проводить исследования на скорость. В большинстве простых случаев,
согласен, RE может быть менее эффективным (но более коротким по количеству
строк кода).
Всего наилучшего,
Константин
Шамтеран: http://shamteran.ru
--- ifmail v.2.15dev5
* Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2)
При переходе по баннеру - скидка 25% на первый месяц обслуживания! При переходе по баннеру - скидка 25% на первый месяц обслуживания!