首页 > 解决方案 > 如何在 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

标签: sqlsql-serverregexpasswords

解决方案


虽然访问完整的正则表达式引擎是理想的,它可以让您编写更强大的密码检查,但您实际上可以使用 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是一个有效的密码。


推荐阅读