Показать сообщение отдельно
Старый 11.03.2013, 16:51   #2  
leva is offline
leva
Участник
 
52 / 36 (2) +++
Регистрация: 03.08.2005
Цитата:
X++:
#localmacro.EmailValidationPattern
    @'([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)'
#endmacro
Какая-то странная регулярка. Явно выделена возможность указания сервера по ip-адресу, но мало того, что никак не проверяется, что число при этом не должно быть больше 255, но к тому же это абсолютно бесполезно сделано, так как вариант [a-zA-Z0-9\-]+ включает их все. Не проверяется, что адрес не может начинаться и заканчиваться точкой. Странные первая "[" после "@" и последняя "]". Домен верхнего уровня может быть больше 4 символов (например travel, museum).

Для простых проверок лучше такой
X++:
@'[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,10})'
Ещё есть вариант в \Classes\SysEmailDistributor\validateEmail, но по-моему он ещё хуже.

Все они абсолютной точности не дадут, но большинство ошибок отсекают. Для проверок по-точнее есть RFC822-совместимый (не для слабонервных). Можно ещё домены верхнего уровня ограничить известными, короче, чем более совершенна проверка, тем монструозней получится регэкс.

В Ax3 реализация регулярных выражений очень глючная, но такой вариант кажется работает верно (здесь < и > можно убрать, если нужно соответствие не всей строки)
X++:
@'<[0-9a-zA-Z\-_]+[0-9a-zA-Z\-_\.]*[^.]@[0-9a-zA-Z\-]+[0-9a-zA-Z\-\.]*\.[a-zA-Z][a-zA-Z]+>'
P.S. Для поддержки кириллицы нужно немного доработать.
P.P.S. Для отладки регулярок рекомендую онлайн тулзу debuggex.com.
За это сообщение автора поблагодарили: S.Kuskov (5).