javascript - 验证带有特殊字符的密码
问题描述
我想使用特殊字符为我的密码添加验证。我的问题是当我使用 '%' 时它不起作用。如何正确添加特殊字符的验证?
$.validator.addMethod("pwcheck", function(value) {
return /^[A-Za-z0-9\d=!\-@._*]*$/.test(value) // consists of only these
&& /[a-z]/.test(value) // has a lowercase letter
&& /[A-Z]/.test(value) // has a upper letter
&& /[!,%,&,@,#,$,^,*,?,_,~]/.test(value) // has a symbol
&& /\d/.test(value) // has a digit
});
解决方案
您可以单独使用单个正则表达式来满足您的要求。你可以试试下面的正则表达式:
^(?=\D\d)(?=[^A-Z]*[A-Z])(?=[^a-z]*[a-z])(?=[^-!@._*#%]*[-!@._*#%])[-A-Za-z0-9=!@._*#%]*$
上述正则表达式的解释:
^, $
- 分别表示行的开始和结束。
(?=\D*\d)
- 代表一个积极的环顾四周,它至少断言一个数字。
(?=[^A-Z]*[A-Z])
- 代表一个肯定的环视,它至少断言一个大写字母。
(?=[^a-z]*[a-z])
- 代表一个积极的环顾四周,它至少断言一个小写字母。
(?=[^-!@._*#%]*[-!@._*#%])
- 代表一个积极的环顾四周,它断言列出的至少一个符号。您可以根据需要添加更多符号。
[-A-Za-z0-9=!@._*#%]*
- 匹配列出的字符中的零个或多个。您可以相应地添加更多符号。
您可以在此处找到上述正则表达式的演示。
上述正则表达式在 javascript 中的示例实现:
const myRegexp = /^(?=[^\d\n]*\d)(?=[^A-Z\n]*[A-Z])(?=[^a-z\n]*[a-z])(?=[^-!@._*#%\n]*[-!@._*#%])[-A-Za-z0-9=!@._*#%]*$/gm; // Using \n for demo example. In real time no requirement of the same.
const myString = `thisisSOSmepassword#
T#!sIsS0om3%Password
thisisSOSmepassword12
thisissommepassword12#
THISISSOMEPASSWORD12#
thisisSOMEVALIDP@SSWord123
`;
// 1. doesn't contain a digit --> fail
// 3. doesn't contain a symbol --> fail
// 4. doesn't contain an Upper case letter --> fail
// 5. doesn't contain a lowercase letter --> fail
let match;
// Taken the below variable to store the result. You can use if-else clause if you just want to check validity i.e. valid or invalid.
let resultString = "";
match = myRegexp.exec(myString);
while (match != null) {
resultString = resultString.concat(match[0] + "\n");
match = myRegexp.exec(myString);
}
console.log(resultString);
参考:
- 推荐阅读:对比原理。
推荐阅读
- java - ID 为整数时按 ID 搜索显示错误
- php - 如何将文件{extends} 扩展为扩展文件?
- python - 无法将多行复制到命令行 python
- flutter - Flutter - 在 FutureBuilder 完成之前,页面似乎不会推送
- laravel - 从分页返回模型集合?
- nginx - Amazon linux 上的 Certbot 1.11 更新
- google-apps-script - 根据从下拉菜单中选择的选项自动复制和粘贴到不同的选项卡
- tensorflow - 张量流中的错误“ValueError:应定义‘密集’输入的最后一个维度。发现‘无’。”
- python - 双重问题;通过 Python 3.9 中的函数调用范围内的随机整数
- c# - 查找数据库中已存在的重复对象