如何在 SQL 中构造密码的正则表达式?
How to construct regex for password in SQL?
我正在为我的 Web 应用程序上的用户注册创建一个新的存储过程。我需要验证用户密码的格式为:
- 必须至少包含一个数字或字母
- 必须至少包含一个特殊字符
我需要设法使用正则表达式来写这个。
这是我在 SQL 服务器 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 服务器的增强 LIKE
运算符来满足您的要求.我在当前代码中看到的问题是,您没有转义第二个 LIKE
表达式中的方括号,该表达式检查是否存在特殊字符。您可以告诉 SQL 服务器您打算如何使用 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;
上面的查询returns什么都没有,说明!Password123
是一个有效的密码。
我正在为我的 Web 应用程序上的用户注册创建一个新的存储过程。我需要验证用户密码的格式为:
- 必须至少包含一个数字或字母
- 必须至少包含一个特殊字符 我需要设法使用正则表达式来写这个。
这是我在 SQL 服务器 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 服务器的增强 LIKE
运算符来满足您的要求.我在当前代码中看到的问题是,您没有转义第二个 LIKE
表达式中的方括号,该表达式检查是否存在特殊字符。您可以告诉 SQL 服务器您打算如何使用 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;
上面的查询returns什么都没有,说明!Password123
是一个有效的密码。