微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

创建一个函数来验证电子邮件 ID,如果有效则返回 1,如果无效则返回 0

如何解决创建一个函数来验证电子邮件 ID,如果有效则返回 1,如果无效则返回 0

这是我的代码

CREATE FUNCTION [dbo].[fnAppEmailCheck]
    (@email VARCHAR(255))   
    --Returns true if the string is a valid email address.  
RETURNS bit  
AS
BEGIN  
     DECLARE @valid bit  

     IF @email IS NOT NULL   
          SET @email = LOWER(@email)  

     SET @valid = 0  

     IF @email LIKE '[a-z,0-9,_,+,-]%@[a-z,-]%.[a-z][a-z]%'
        AND LEN(@email) = LEN(dbo.fnAppStripNonEmail(@email))  
        AND @email NOT like '%@%@%' 
        AND CHARINDEX('.@',@email) = 0
        AND PATINDEX('%[a-zA-Z]%',@email) <> 0
        AND CHARINDEX('..',@email) = 0  
        AND CHARINDEX(',',@email) = 0              
        AND RIGHT(@email,1) between 'a' AND 'z'  
            SET @valid = 1  

     RETURN @valid  
END 

我的 fnAppStripNonEmail 函数

CREATE FUNCTION [dbo].[fnAppStripNonEmail]
    (@Temp VarChar(1000))
RETURNS VarChar(1000)
AS
BEGIN
    DECLARE @KeepValues AS varchar(50)
    SET @KeepValues = '%[^a-z,^0-9,@,.,-]%'

    WHILE PATINDEX(@KeepValues,@Temp) > 0
        SET @Temp = STUFF(@Temp,PATINDEX(@KeepValues,@Temp),1,'')
    
    RETURN @Temp
END

在屏幕截图中,每种格式都可以按照我的要求正常工作,但它将 22@gmail.com 标记为 1。我希望我的电子邮件 ID 至少包含一个字母。

Please find the screenshot for reference

解决方法

CREATE FUNCTION dbo.CheckValidEmail(@EMAIL varchar(100))RETURNS bit as
BEGIN     
  DECLARE @bitEmailVal as Bit
  DECLARE @EmailText varchar(200)

  SET @EmailText=ltrim(rtrim(isnull(@EMAIL,'')))

  SET @bitEmailVal = case when @EmailText = '' then 0
                          when @EmailText like '% %' then 0
                          when @EmailText like ('%["(),:;<>\]%') then 0
                          when substring(@EmailText,charindex('@',@EmailText),len(@EmailText)) like ('%[!#$%&*+/=?^`_{|]%') then 0
                          when (left(@EmailText,1) like ('[-_.+]') or right(@EmailText,1) like ('[-_.+]')) then 0                                                                                    
                          when (@EmailText like '%[%' or @EmailText like '%]%') then 0
                          when @EmailText LIKE '%@%@%' then 0
                          when @EmailText NOT LIKE '_%@_%._%' then 0
                          else 1 
                      end
  RETURN @bitEmailVal
END 
GO

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。