В макросах для 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, или ещё как-то)
А переделывать пример несколько раз - как-то нет особого желания.
а можно написать пример? и выложить ссылку?
Отправить комментарий