T-SQL: проверка формата электронной почты

У меня есть такой сценарий, когда мне нужна целостность данных в физической базе данных. Например, у меня есть переменная @email_address VARCHAR(200), и я хочу проверить, имеет ли значение @email_address формат электронной почты. Кто-нибудь знает, как проверить формат в T-SQL?

Большое спасибо!

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
7
1
35 086
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Если вы используете SQL 2005 или 2008, вам может потребоваться написать хранимые процедуры CLR и использовать механизм регулярных выражений .NET как это. Если вы используете SQL 2000 или более раннюю версию, вы можете использовать регулярное выражение как это движка сценариев VBScript. Вы также можете использовать расширенную хранимую процедуру как это

Ответ принят как подходящий

Я проверил следующий запрос с множеством разных неправильных и действительных адресов электронной почты. Он должен делать свою работу.

IF (
     CHARINDEX(' ',LTRIM(RTRIM(@email_address))) = 0 
AND  LEFT(LTRIM(@email_address),1) <> '@' 
AND  RIGHT(RTRIM(@email_address),1) <> '.' 
AND  CHARINDEX('.',@email_address ,CHARINDEX('@',@email_address)) - CHARINDEX('@',@email_address ) > 1 
AND  LEN(LTRIM(RTRIM(@email_address ))) - LEN(REPLACE(LTRIM(RTRIM(@email_address)),'@','')) = 1 
AND  CHARINDEX('.',REVERSE(LTRIM(RTRIM(@email_address)))) >= 3 
AND  (CHARINDEX('.@',@email_address ) = 0 AND CHARINDEX('..',@email_address ) = 0)
)
   print 'valid email address'
ELSE
   print 'not valid'

Он проверяет эти условия:

  • Нет встроенных пространств
  • "@" не может быть первым символом адреса электронной почты.
  • '.' не может быть последним символом адреса электронной почты
  • Должен быть "." где-то после "@"
  • знак '@' разрешен
  • Имя домена должно заканчиваться не менее чем двумя символами.
  • не может быть шаблонов вроде '. @' и '..'

Благодарность! Я понятия не имел об условиях, которые вы разместили. Спасибо за ответ!

jerbersoft 09.01.2009 03:12

@splattne ... эта функция не работает на mssql 2008. это отличная функция, работающая на mssql 2012, но не на 2008

IBM 03.05.2016 21:36

AFAIK нет хорошего способа сделать это.

Стандарт формата электронной почты настолько сложен, что синтаксические анализаторы могут обрабатывать тысячи строк кода, но даже если бы вы использовали более простую форму, которая вызвала бы сбой некоторых неясных, но действительных адресов, вам пришлось бы делать это без регулярных выражений, которые являются не поддерживается изначально T-SQL (опять же, я не на 100% в этом отношении), оставляя вам простой запасной вариант, например:

LIKE '%_@_%_.__%'

..или похожие.

Мне кажется, что вы не должны делать это в последний возможный момент, хотя (когда вы вставляете в БД) вы должны делать это при первой возможности и / или через общий шлюз (контроллер, который фактически выполняет вставку SQL request), где, кстати, у вас будет преимущество регулярного выражения и, возможно, даже библиотеки, которая выполняет «настоящую» проверку за вас.

Для базовой проверки этого достаточно.

Jānis Gruzis 09.10.2013 19:20

Боюсь, что нет простого способа сделать это в T-SQL. Чтобы проверить все варианты адресов электронной почты, разрешенные RFC 2822, вам нужно будет использовать регулярное выражение.

Подробнее здесь.

Вам нужно будет определить свою область действия, если вы хотите ее упростить.

Другие вопросы по теме