使用RegEX(SQL)进行电子邮件验证

3hvapo4f  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(131)

我试图验证电子邮件在SQL中使用RegEX实现以下标准。
创建一个查询(使用运算符LIKE),搜索包含以下内容的所有电子邮件地址:
1.只有一个符号“@”
1.至少有一个符号“.”
1.如果只有一个“.”符号,则应该在符号“@”之后(而不是之前)
1.至少6个字符
1.符号“.”和“@”不能相邻
1.符号“.”或“@”不得出现在地址的开头或结尾。此外,电子邮件地址不得包含以下符号:“=”、“_”、“-”、“+”、“&”、“<”、“>”或“,”。
我试着写了一个查询,我已经考虑了上述所有问题,除了至少6个字符的条件。我得到的结果,但他们都得到显示为无效,我不知道为什么。
下面是我写的查询:

SELECT EmailAddress 
CASE WHEN EmailAddress Like '%^[A-Za-z0-9._%\-+!#$&/=?^|~]+@[A-Za-z0-9.-]+[.][A-Za-z]+$%' THEN 'Valid'
ELSE 'INVALID' END
AS valid_email
FROM Database
Where EmailAddress is not null

字符串

jm81lzqq

jm81lzqq1#

标准LIKE不处理正则表达式。
我不建议使用以下代码,但它满足您的标准:

SELECT
    EmailAddress,
    CASE
        WHEN (
            ( NOT EmailAddress LIKE '%@%@%' )    -- 1
            AND ( EmailAddress LIKE '%.%' )      -- 2
            AND ( EmailAddress LIKE '%@%.%' )    -- 3
            AND ( EmailAddress LIKE '______%' )  -- 4
            AND ( NOT (                          -- 5
                ( EmailAddress LIKE '%@.%' )
                OR ( EmailAddress LIKE '%.@%' )
            ) )
            AND ( NOT (                          -- 6(a)
                ( EmailAddress LIKE '@%' )
                OR ( EmailAddress LIKE '.%' )
                OR ( EmailAddress LIKE '%@' )
                OR ( EmailAddress LIKE '%.' )
            ) )
            AND ( NOT (                          -- 6(b)
                ( EmailAddress LIKE '%=%' )
                OR ( EmailAddress LIKE '%\_%' ESCAPE '\' )
                OR ( EmailAddress LIKE '%-%' )
                OR ( EmailAddress LIKE '%+%' )
                OR ( EmailAddress LIKE '%&%' )
                OR ( EmailAddress LIKE '%<%' )
                OR ( EmailAddress LIKE '%>%' )
                OR ( EmailAddress LIKE '%,%' )
            ) )
        ) THEN 'Valid'
        ELSE 'INVALID'
    END
    AS valid_email
FROM Database
Where EmailAddress IS NOT NULL
;

字符串
备注:

  • =_-+&在局部部分完全有效
  • -在域部分有效
  • 如果正确引用,则<>,在本地部分中有效
  • 此表达式通常不能正确分类电子邮件地址
  • 没有表达式可以先验地确定地址是否实际存在,即使它在语法上是有效的
  • 我使用Database是因为您使用了,但您可能指的是Database.Table

相关问题