Ограничение проверки электронной почты SQL

У меня есть таблица базы данных, содержащая поле Email. Каким-то образом недействительный адрес электронной почты прошел проверку приложения и попал в поле базы данных.

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


person Curt    schedule 04.08.2011    source источник
comment
Я чувствую, что это повторяющийся вопрос, и на него отвечает http://stackoverflow.com/questions/229824/tsql-email-validation-without-regex ссылка   -  person Karan Shah    schedule 04.08.2011
comment
Как мне добавить это в ограничение?   -  person Curt    schedule 04.08.2011


Ответы (2)


Это немного зависит от того, что для вас значит действительный. Для меня адрес электронной почты может быть действительным (то есть он правильно сформирован в соответствии с RFC 5322), но я не смогу отправить на него. Независимо от того, нужно ли вам проверить а) формат адреса или б) вашу способность отправлять на него электронную почту, зависит от приложения.

Если вы просто хотите убедиться, что адрес электронной почты пользователя имеет правильный формат, вы застряли с проверкой с помощью регулярного выражения. Удачи с этим. См. Удручающие подробности в RFC 3696, «3. Ограничения на адреса электронной почты».

Внезапно, вот несколько ориентиров, которые я использовал в прошлом, чтобы помочь моим клиентам принимать решения о проверке электронной почты.

  • Пользователь хочет получать от нас электронную почту; предполагать, что пользователь мотивирован на исправление ошибок. (Принимайте все, что имеет символ «@» и «.» Примерно в нужном месте.)
  • Есть проблемы с конфиденциальностью; отправить электронное письмо на адрес пользователя и потребовать от пользователя щелкнуть ссылку для подтверждения. (Вы по-прежнему можете принять что угодно с символом «@» и «.» Примерно в нужном месте. Требуется сотрудничество между разработкой базы данных и веб-приложений.)
  • Вовлечены местные политики. Ограничьте адреса электронной почты этим произвольным подмножеством действительно действительных адресов электронной почты. (Я видел это, когда одна компания покупает другую и требует, чтобы всем был назначен новый адрес электронной почты, прежде чем эти учетные записи электронной почты будут фактически созданы.)

В зависимости от того, какой путь вы выберете, вам понадобится более свободное или более жесткое регулярное выражение. По моему опыту, в большинстве случаев люди придерживаются более слабой проверки.

person Mike Sherrill 'Cat Recall'    schedule 04.08.2011

Согласно этой статье, SQL Server поддерживает регулярные выражения в ограничениях CHECK. Добавьте к этому четкое регулярное выражение проверки электронной почты, и все будет в порядке.

Вы также можете использовать LIKE в CHECK.

Также вы можете включить интеграцию со средой CLR в SQL Server и создают функцию CLR если вы используете SQL Server 2005 или выше и вызываете его в ограничении CHECK. Функция CLR будет обрабатывать проверку регулярного выражения.

person Ranhiru Jude Cooray    schedule 04.08.2011