首页 > 解决方案 > 验证带有特殊字符的密码

问题描述

我想使用特殊字符为我的密码添加验证。我的问题是当我使用 '%' 时它不起作用。如何正确添加特殊字符的验证?

$.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
});

标签: javascriptjqueryregexvalidation

解决方案


您可以单独使用单个正则表达式来满足您的要求。你可以试试下面的正则表达式:

^(?=\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);

参考:

  1. 推荐阅读:对比原理。

推荐阅读