T-SQL:检查电子邮件格式T-SQL:检查电子邮件格式(T-SQL: checking for e

2019-05-12 10:53发布

我有这样的场景,我需要在物理数据库的数据完整性。 例如,我有一个变量@email_address VARCHAR(200)我想检查是否值@email_address是电子邮件格式。 任何人有任何想法如何在T-SQL查询的格式?

非常感谢!

Answer 1:

我测试下面的查询与许多不同的错误的和有效的电子邮件地址。 它应该做的工作。

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'

它会检查这些条件:

  • 嵌入空格
  • “@”不能是电子邮件地址的第一个字符
  • '' 不能是电子邮件地址的最后一个字符
  • 必须有一个“” 之后某处“@”
  • 在“@”符号被允许
  • 域名必须有至少2个字符的扩展名结尾
  • 不能有模式,如“@”和“..”


Answer 2:

AFAIK没有做到这一点没有什么好办法。

电子邮件格式标准是如此复杂的解析器已经知道运行到上千行的代码,但即使你使用一个简单的形式,它会失败一些模糊的,但有效地址,你必须做没有的正则表达式本身不被T-SQL(再次,我不是100%)的支持,让你有somethign像一个简单的回退:

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

..或相似。

我的感觉通常是你shouln't在最后一刻,虽然做这个(当你插入一个DB),你应该在第一次有机会和/或公共网关(控制器实际上使SQL插入那样做请求),顺便在那里你将有正则表达式的优势,甚至可能是其是否“真实”验证了您的图书馆。



Answer 3:

如果您使用SQL 2005或2008年,你可能想看看在写作CLR存储proceudues和使用.NET正则表达式引擎这样 。 如果您使用SQL 2000或更早的版本,你可以使用VBScript脚本引擎的正则表达式喜欢的部份 。 你也可以使用扩展存储过程是这样



Answer 4:

有没有简单的方法来做到这一点的T-SQL,我很害怕。 为了验证所允许的电子邮件地址的所有品种RFC 2822 ,您将需要使用正则表达式。

更多信息这里 。

您需要定义范围,如果你想简化它。



文章来源: T-SQL: checking for email format