TSQL电子邮件验证(无正则表达式)

15 浏览
0 Comments

TSQL电子邮件验证(无正则表达式)

有很多正则表达式可以用来验证电子邮件地址,但是有没有一些基本的电子邮件验证方法可以集成到Sql Server 2005的TSQL查询中呢?

我不想使用CLR过程或函数,只想用纯粹的TSQL。

有人已经解决过这个问题了吗?

0
0 Comments

TSQL Email Validation (without regex) - 邮箱验证

在进行数据库操作时,我们经常需要对数据进行验证,其中包括对邮箱地址的验证。本文将介绍一种在TSQL中进行邮箱验证的方法,该方法不使用正则表达式。

首先,我们可以使用

LIKE

语句来进行基本的验证。下面是一个示例代码:

SELECT
  EmailAddress, 
  CASE WHEN EmailAddress LIKE '%_@_%_.__%' 
            AND EmailAddress NOT LIKE '%[any obviously invalid characters]%' 
  THEN 'Could be' 
  ELSE 'Nope' 
  END Validates
FROM 
  Table

上述代码会匹配一个中间带有@符号的字符串,该字符串前面至少有一个字符,后面至少有两个字符,且包含一个点和至少两个字符的顶级域名(TLD)。

虽然可以编写更多的LIKE模式来进行更具体的验证,但是我们永远无法匹配到所有可能的邮箱地址,同时还有可能会漏掉一些不符合规范的地址。即使使用正则表达式,也很难做到完全正确。另外,即使根据RFC(电子邮件规范)的字母进行匹配,也会匹配到大多数邮件系统不接受/使用的地址构造。

在数据库层面进行这样的验证可能不是正确的方法,因此像上面示例中的基本验证可能是性能方面最好的选择。而在应用程序中进行验证将提供更大的灵活性。

如果你已经在代码中使用了正则表达式进行验证,但需要对包含大量邮箱地址的表进行报表生成,那么可能需要考虑其他方法。

根据你的基础数据,你可能会得到比我建议的更具体和合适的验证方法,但是从算法理论上来说,你永远无法达到完全正确的结果。

某些情况下了"not like '%[any obviously invalid characters]%'",根据我对规范的了解,实际上几乎没有键盘上不存在的字符不能在邮箱地址中使用。

这取决于你的键盘。在我的键盘上,有'ö'、'ä'、'ü'和'ß',无论如何这些字符都是无效的。尖括号等字符也是不允许的,还有其他一些字符。

根据电子邮件规范RFC 5322,section 3.4,引号内的任何字符都是允许的,例如"[hello] ".com。然而,出于实际原因,在TSQL中构建一个验证器是很困难的,你需要具备解析工具(词法分析)。

感谢上述讨论,我刚刚使用了这种方法。我们遇到的一个错误邮箱地址是"something.com",这是一个有效的邮箱地址。我认为表达式应该从'%_@_%_.__%'更改为'%_@%_.__%'。

0
0 Comments

TSQL Email Validation (without regex)的问题是出现在上述代码中。该代码是一个用于检查字符串是否为有效电子邮件地址的函数。但是,该函数存在一些问题,导致无法准确地验证电子邮件地址的有效性。

首先,在函数中使用了一个名为"fnAppStripNonEmail"的函数,但没有提供该函数的具体定义或说明。因此,无法确定该函数的作用和实现方式。

其次,在函数中使用了一些条件来验证电子邮件地址的有效性。但是,这些条件并不完善。例如,函数中使用了一个LIKE表达式来验证电子邮件地址的格式,但该表达式并不准确。它只验证了电子邮件地址的基本格式,而没有考虑到一些特殊情况,如带有连字符的电子邮件地址。

此外,函数还存在一些其他问题。例如,函数没有处理电子邮件地址中的空格,这可能导致错误的验证结果。另外,函数在某些情况下可能会抛出一个错误,提示"Maximum stored procedure, function, trigger, or view nesting level exceeded (limit 32)"。

这个函数存在一些问题,无法准确地验证电子邮件地址的有效性。为了解决这些问题,可以采取以下措施:

1. 提供"fnAppStripNonEmail"函数的具体定义或说明,以便了解该函数的作用和实现方式。

2. 修改LIKE表达式,以准确验证电子邮件地址的格式。可以使用更精确的正则表达式来进行验证,或者使用其他更可靠的方法来检查电子邮件地址的格式。

3. 处理电子邮件地址中的空格。可以添加一个条件来检查电子邮件地址中是否存在空格,并在存在空格时进行相应的处理。

4. 处理函数可能抛出的错误。可以通过优化函数的逻辑或结构,减少嵌套层级,以避免抛出错误。

通过以上措施,可以改进该函数,提高电子邮件地址的验证准确性和功能性。

0