Ограничение проверки электронной почты SQL
У меня есть таблица базы данных, которая содержит Email
поле. Каким-то образом неверный адрес электронной почты прошел проверку приложения и попал в поле базы данных.
Как добавить ограничение в это поле, чтобы невозможно было сохранить недействительный адрес электронной почты?
3 ответа
Это немного зависит от того, что значит для тебя действительный. Для меня адрес электронной почты может быть действительным (то есть он сформирован правильно в соответствии с RFC 5322), но я не смогу отправить его. Нужно ли вам проверять a) формат адреса или b) вашу способность отправлять на него электронную почту, зависит от приложения.
Если вы просто хотите убедиться, что адрес электронной почты пользователя имеет правильный формат, вы застряли с проверкой с помощью регулярного выражения. Удачи с этим. См. RFC 3696, "3. Ограничения по адресам электронной почты" для получения удручающих подробностей.
Вдобавок ко всему, вот некоторые руководящие принципы, которые я использовал в прошлом, чтобы помочь моим клиентам принимать решения о проверке электронной почты.
- Пользователь хочет получить от нас письмо; Предположим, что пользователь заинтересован в исправлении ошибок. (Примите что-нибудь с символом "@" и "." Примерно в нужном месте.)
- Есть проблемы конфиденциальности; отправить электронное письмо на адрес пользователя и потребовать от пользователя щелкнуть ссылку для подтверждения. (Вы все еще можете принять что-нибудь с символом "@" и "." Примерно в нужном месте. Требуется сотрудничество между базой данных и разработкой веб-приложения.)
- Местные политики участвуют. Ограничьте адреса электронной почты этим произвольным подмножеством действительно действительных адресов электронной почты. (Я видел это, когда одна компания выкупает другую и требует, чтобы всем был назначен новый адрес электронной почты, прежде чем эти учетные записи будут фактически созданы.)
В зависимости от того, по какому пути вы пойдете, вам понадобится более слабое или более жесткое регулярное выражение. По моему опыту, большую часть времени большинство людей идут с более слабой проверкой.
Пожалуйста, посмотрите на самый простой пример, который я разместил здесь
Согласно этой статье, SQL Server поддерживает регулярные выражения в ограничениях CHECK. Сопоставьте это с надежным регулярным выражением проверки электронной почты, и все будет хорошо.
Вы также можете использовать LIKE в ограничении CHECK.
Также вы можете включить интеграцию CLR в SQL Server и создать функцию CLR, если вы используете SQL Server 2005 или более позднюю версию, и вызывать ее в ограничении CHECK. Функция CLR будет обрабатывать проверку правильности регулярного выражения.