Проверка синтаксиса адреса электронной почты на VBA

В макросах для Excel иногда требуется производить проверку адреса электронной почты на корректность.

В большинстве случаев нужно быть уверенным не только в том, что такой адрес содержит знак @ и точку, но и в том, что все остальные символы представлены буквами, числами или знаками подчеркивания.
Проще всего реализовать эту проверку с использованием регулярных выражений (объект RegExp)

Sub ПримерПроверкиАдресаПочты()
    Debug.Print CheckEmail("order@ExcelVBA.ru")    ' возвращает TRUE (корректный адрес почты)
    Debug.Print CheckEmail("123-order@ExcelVBA.ru")    ' возвращает TRUE (корректный адрес почты)
    Debug.Print CheckEmail("create.order@Excel.VBA.ru")    ' возвращает TRUE (корректный адрес почты)
    Debug.Print CheckEmail("mail@Excel-macro.ru")    ' возвращает TRUE (корректный адрес почты)

    Debug.Print CheckEmail("order@ExcelVBA")    ' возвращает FALSE (ошибка в адресе почты)
    Debug.Print CheckEmail("order.ExcelVBA.ru")    ' возвращает FALSE (ошибка в адресе почты)
    Debug.Print CheckEmail("order.ExcelVBA@ru")    ' возвращает FALSE (ошибка в адресе почты)
End Sub

Используемый в функции шаблон может принимать любое количество цифр и букв, символов подчеркивания, точки и тире перед знаком «@» и после символа «@» до точки, но только числа, буквы и символы подчеркивания после точки.

Код функции CheckEmail:

Function CheckEmail(ByVal email As String) As Boolean
    ' функция проверяет на корректность (соответствию стандарту)
    ' адрес почты email, переданный ей в качестве параметра
    ' (используется проверка на соответствие регулярному выражению)
    ' Функция возвращает TRUE, если адрес корректный, и FALSE в обратном случае
    With CreateObject("vbscript.regexp")
        .IgnoreCase = True
        .Pattern = "^[\w-\.]+@[\w-\.]+\.\w+$"
        CheckEmail = .Test(email)
    End With
End Function

PS: Хочу заметить, что, на самом деле, проверка синтаксиса адреса email - задача весьма нетривиальная, поскольку стандарты, описанные в документах RFC 5322 и RFC 5321, допускают самые неожиданные варианты допустимых адресов
(например, по стандарту адрес email может содержать пробелы, кавычки, спецсимволы, несколько символов «@» и т.п.)
Так что данный код не претендует на 100% решение проблемы, - но, тем не менее, в абсолютном большинстве случаев выполняемой проверки вполне достаточно.

PPS: Аналогичная функция для проверки корректности IP адреса:

Function IsIP(ByVal txt As String) As Boolean
    'возвращает TRUE, если IP адрес узла корректен
    With CreateObject("vbscript.regexp")
        .IgnoreCase = True
        .Pattern = "\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b"
        IsIP = .Test(txt)
    End With
End Function

Комментарии

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Какая библиотека regexp используется в парсере?

Спасибо большое за скриптик. Очень помогло. Использовал на wps office - запустилось без проблем

А где Эксель файл? Как скачать?

Пример чего?
Я не телепат, и не представляю, для каких целей вы намерены использовать функцию.
(в коде, или как UDF на листе Excel, или ещё как-то)

А переделывать пример несколько раз - как-то нет особого желания.

а можно написать пример? и выложить ссылку?

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
CAPTCHA
Подтвердите, пожалуйста, что вы - человек:
   ___    _     _   _                    __ 
( _ ) | |_ | | | | __ _ _ _ / _|
/ _ \ | __| | | | | / _` | | | | | | |_
| (_) | | |_ | |_| | | (_| | | |_| | | _|
\___/ \__| \___/ \__, | \__,_| |_|
|___/
Введите код, изображенный в стиле ASCII-арт.

Не получается применить макрос? Не удаётся изменить код под свои нужды?

Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.