正则表达式密码验证,具有大小写字母以及特殊字符

时间:2018-08-20 13:22:33

标签: javascript regex validation

我正在尝试通过检查密码是否包含小写和大写字母以及特殊字符来创建密码验证,但仍然失败。
所以我有:

testPwd(val){
  return Boolean(/^[a-zA-Z0-9]+$/.test(val));
}

以下测试证明了注册表无法正常工作:

console.log(testPwd("123")  

显示为真。
您能否提供有效的正则表达式,以确保包括所有方案(大写和小写字母以及特殊字符)?

4 个答案:

答案 0 :(得分:2)

这有效:

function testPwd(val) {
  return Boolean(/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%]).{4,8}$/.test(val));
}

console.log(testPwd('1dDs!'));

它也具有可选的密码长度检查。因此,正则表达式会检查4-8个字符之间的密码(您可以根据需要更改或删除密码),并检查:

  • 1个或更多大写字母
  • 1个或更多小写字母
  • [!@#$%]中有1个或更多特殊字符

有效演示: https://jsfiddle.net/16bzfLj3/5/

答案 1 :(得分:0)

虽然@kltr的答案是正确的,但我不建议您使用这种冗长的正则表达式(特别是如果您对它们不太熟悉的话)。考虑到它是客户端代码,而不是将由后端服务大量执行的功能,因此您不必担心性能,因此我的建议是分别对每个所需字符进行正则表达式检查,这将以便将来添加或删除某些必需的字符时,使代码更易于理解并且将来更易于编辑。

testPwd = function(val) {
    var lowercase = /[a-z]/.test(val);
    var uppercase = /[A-Z]/.test(val);
    var numbers = /[0-9]/.test(val);
    return lowercase === true && uppercase === true && numbers === true;    
}

您可以选择所需的详细程度(例如,不为每个正则表达式分配var等),也可以将每个正则表达式调整为适合您的链接,但是IMO我会选择它。这样一来,您就可以以相对较少的精力提供详细的错误响应(例如:“您缺少大写字母”。)

答案 2 :(得分:0)

您的代码无法正常工作,因为:

  1. 您未包括对符号的检查
  2. 这只是检查是否满足这些条件的任何,而不是全部

一些答案​​已经涵盖了进行检查的正确方法。尽管它们很好,但它们缺乏解释。

因此,这是一个简化的说明,向您解释了每一行:

function testPwd(str){
  var lowerCase = /[a-z]/,      // test for lowercase only
      upperCase = /[A-Z]/,      // test for uppercase only
      number = /[0-9]/,         // test for number only
      symbols = /[^a-zA-Z0-9]/; // test for non-string and non-number

  // If there isn't any lower case, return false
  if (lowerCase.test(str) === false)
    return false;
 
  // If there isn't any uppercase case, return false
  if (upperCase.test(str) === false)
    return false;
    
  // If there isn't any number, return false
  if (number.test(str) === false)
    return false;
    
  // If there isn't any symbols, return false
  if (symbols.test(str) === false)
    return false;
    
  // Now if the code executes until this position,
  // it means all conditions are successfully met
  // so, return true;
  return true;
}

var testCase = ['1234', 'abcd', 'ABCD', '!@#$', '1bcD', '1bC$'];
testCase.forEach(function(pwd){
  console.log(pwd + ' : ' + testPwd(pwd));
});

请注意,您还应该在实际代码中包括长度检查。

答案 3 :(得分:-2)

尝试:

("^(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#\$%\^&\*])");

RegEx说明:
^密码字符串将以此方式开始
(?=。 [a-z])字符串必须包含至少1个小写字母字符
(?=。
[A-Z])字符串必须包含至少1个大写字母字符
(?=。[!@#\ $%\ ^&])字符串必须至少包含一个特殊字符。