Проверка синтаксиса адреса электронной почты на VBA
- Макросы VBA Excel
- Текстовые строки
- Разное
- IP адрес
- Рассылка почты
- Проверка ввода
|
В макросах для 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
|