MyTetra Share
Делитесь знаниями!
Проверка синтаксиса адреса электронной почты на VBA
03.01.2018
15:57
Текстовые метки: CheckEmail,Email,Текстовые строки,IP адрес,Рассылка почты,Проверка ввода
Раздел: VBA - Средства Windows

Проверка синтаксиса адреса электронной почты на 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
  • 12457 просмотров
 
MyTetra Share v.0.52
Яндекс индекс цитирования