Сделано в Раскрутке

Архив эхоконференции RU.PHP

- 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% на первый месяц обслуживания!
Самый простой способ получить ROOT-доступ
При переходе по баннеру - скидка 25% на первый месяц обслуживания!