sql - 如何在 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
是一个有效的密码。
推荐阅读
- asp.net-core - Ocelot ApiGateway 无法访问 Kubernetes 上的其他服务
- python - pip3 vs python3 -m pip vs python3.7 -m pip
- excel - excel 中的 SEARCH 功能无法正常工作
- linux - 如何将变量设置为shell脚本中变量内的变量
- c# - 使用 specsync 将 Specflow 方案(功能文件方案)与 Azure DevOps 测试计划同步
- python - 用来自另一个数据框的值填充一列
- c# - 需要在 C# 中使用用户名和密码创建登录窗口,但是当我输入不正确的用户名或密码时出现错误
- maven - 如何将 Keycloak 旧版本 4.1.0 转换为“独立服务器分发”?
- powershell - 提取嵌套档案以获取内容
- c - 将double转换为int的安全方法是什么?