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

В зоопарке есть недокументированное и не экспортированное .fill_short_gaps, которое используется так:

zoo:::.fill_short_gaps(x, fill = numeric(length(x)), maxgap = 3)

, дающее:

2019-01-17 2019-01-18 2019-01-19 2019-01-20 2019-01-21 2019-01-22 2019-01-23 
         1          0          0          0          5          6          7 
2019-01-24 2019-01-25 2019-01-26 2019-01-27 2019-01-28 2019-01-29 2019-01-30 
         8          9         NA         NA         NA         NA         NA 
2019-01-31 2019-02-01 2019-02-02 2019-02-03 2019-02-04 2019-02-05 
        NA         NA         17         18         19         20 
7
задан Cade Roux 12 January 2009 в 16:39
поделиться

4 ответа

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

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'

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

  • Никакие встроенные пробелы
  • не может быть первый символ адреса электронной почты
  • '.' не может быть последний знак адреса электронной почты
  • Должен быть a'.' где-нибудь после
  • знак позволяется
  • Доменное имя должно закончиться по крайней мере 2 символьными расширениями
  • не может иметь шаблонов как '.@' и '..'
18
ответ дан 6 December 2019 в 06:26
поделиться

AFAIK там не является никаким хорошим способом сделать это.

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

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

.. или подобный.

Мое чувство обычно в том состоит, что Вы shouln't сделать это в прошлый момент, хотя (поскольку Вы вставляете в DB) необходимо делать его при первой возможности и/или общий шлюз (контроллер, который на самом деле заставляет SQL вставить запрос), где случайно Вы имели бы преимущество regex и возможно даже библиотеки, которая делает "реальную" проверку для Вас.

8
ответ дан 6 December 2019 в 06:26
поделиться

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

1
ответ дан 6 December 2019 в 06:26
поделиться

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

Более подробная информация.

Необходимо будет определить объем, если Вы захотите упростить его.

1
ответ дан 6 December 2019 в 06:26
поделиться