繁体   English   中英

如何在SQL中为密码构造正则表达式?

[英]How to construct regex for password in SQL?

我正在为Web应用程序上的用户注册创建一个新的存储过程。 我需要验证用户密码的格式为:

  • 它必须包含至少一个数字或字母
  • 它必须至少包含一个特殊字符,我需要设法使用正则表达式来编写它。

这是针对我在SQL Server 2017中创建的新数据库。我的数据库可以正常工作,并且电子邮件验证也可以正常工作。

IF (@password NOT LIKE '%[a-zA-Z0-9]%' OR @password NOT LIKE '%~!@#$%^&*()_+-={}[]:"|\;,./<>?''%' OR LEN(@password) < 8)
        BEGIN
                SET @message = 'Invalid credentials'
                RETURN;
        END
                ELSE
                SET @message = 'Success'
                RETURN;
                END

到目前为止,这是我的代码,老实说,我尝试了很多组合,但还是一无所获。

我希望密码如!Password123的输出是Success但我仍然会收到“ Invalid credentials ”和密码如Password123的输出! 我仍然收到“ Invalid credentials

虽然理想的情况是可以访问完整的正则表达式引擎(使您可以编写更可靠的密码检查),但实际上您可以使用SQL Server的增强型LIKE运算符来满足您的要求。 我在当前代码中看到的问题是您没有在第二个LIKE表达式中转义方括号,该表达式检查是否存在特殊字符。 您可以按照以下步骤告诉SQL Server如何计划使用ESCAPE逃避方括号:

DECLARE @password VARCHAR(500);
SET @password = '!Password123';

SELECT 1
WHERE
    @password NOT LIKE '%[a-zA-Z0-9]%' OR
    @password NOT LIKE '%[~!@#$%^&*()_+-={}\[\]:"|\;,./<>?'']%' ESCAPE '\' OR
    LEN(@password) < 8;

上面的查询未返回任何内容,指示!Password123是有效的密码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM