具有特殊字符的Javascript正则表达式密码验证

具有特殊字符的Javascript正则表达式密码验证,javascript,regex,passwords,Javascript,Regex,Passwords,我正在尝试使用正则表达式验证密码。如果所有字符都是字母,密码就会更新。我哪里做错了?正则表达式正确吗 function validatePassword() { var newPassword = document.getElementById('changePasswordForm').newPassword.value; var minNumberofChars = 6; var maxNumberofChars = 16; var regularExpres

我正在尝试使用正则表达式验证密码。如果所有字符都是字母,密码就会更新。我哪里做错了?正则表达式正确吗

function validatePassword() {
    var newPassword = document.getElementById('changePasswordForm').newPassword.value;
    var minNumberofChars = 6;
    var maxNumberofChars = 16;
    var regularExpression  = /^[a-zA-Z0-9!@#$%^&*]{6,16}$/;
    alert(newPassword); 
    if(newPassword.length < minNumberofChars || newPassword.length > maxNumberofChars){
        return false;
    }
    if(!regularExpression.test(newPassword)) {
        alert("password should contain atleast one number and one special character");
        return false;
    }
}
函数validatePassword(){
var newPassword=document.getElementById('changePasswordForm').newPassword.value;
var-minNumberofChars=6;
var maxNumberofChars=16;
var regularExpression=/^[a-zA-Z0-9!@$%^&*]{6,16}$/;
警报(新密码);
if(newPassword.lengthmaxNumberofChars){
返回false;
}
if(!regularpression.test(newPassword)){
警报(“密码应至少包含一个数字和一个特殊字符”);
返回false;
}
}

如果单独检查长度,可以执行以下操作:

var regularExpression  = /^[a-zA-Z]$/;

if (regularExpression.test(newPassword)) {
    alert("password should contain atleast one number and one special character");
    return false;
} 
使用积极的断言:

var regularExpression = /^(?=.*[0-9])(?=.*[!@#$%^&*])[a-zA-Z0-9!@#$%^&*]{6,16}$/;
如果没有它,您当前的正则表达式只匹配您有6到16个有效字符,它不会验证它是否至少有一个数字,以及至少有一个特殊字符。这就是上面的展望的目的

  • (?=.[0-9])
    -断言字符串至少有一个数字
  • (?=.[!@$%^&*])
    -断言字符串至少有一个特殊字符

    • 不要试图一步做太多。把每一条规则分开

      function validatePassword() {
          var p = document.getElementById('newPassword').value,
              errors = [];
          if (p.length < 8) {
              errors.push("Your password must be at least 8 characters");
          }
          if (p.search(/[a-z]/i) < 0) {
              errors.push("Your password must contain at least one letter."); 
          }
          if (p.search(/[0-9]/) < 0) {
              errors.push("Your password must contain at least one digit.");
          }
          if (errors.length > 0) {
              alert(errors.join("\n"));
              return false;
          }
          return true;
      }
      
      函数validatePassword(){
      var p=document.getElementById('newPassword')。值,
      误差=[];
      如果(p.长度<8){
      错误。推送(“您的密码必须至少为8个字符”);
      }
      如果(p.search(/[a-z]/i)<0){
      错误。推送(“您的密码必须至少包含一个字母。”);
      }
      如果(p.search(/[0-9]/)<0){
      错误。推送(“您的密码必须至少包含一个数字。”);
      }
      如果(errors.length>0){
      警报(错误。加入(“\n”);
      返回false;
      }
      返回true;
      }
      
      函数validatePassword(){
      var p=document.getElementById('newPassword')。值,
      误差=[];
      如果(p.长度<8){
      错误。推送(“您的密码必须至少为8个字符”);
      }
      如果(p.search(/[a-z]/i)<0){
      错误。推送(“您的密码必须至少包含一个字母。”);
      }
      如果(p.search(/[0-9]/)<0){
      错误。推送(“您的密码必须至少包含一个数字。”);
      }
      如果(errors.length>0){
      警报(错误。加入(“\n”);
      返回false;
      }
      返回true;
      }
      

      下面的答案中有一个特定的问题,因为在检查字符和数字时,由于缺少[]而没有检查整个字符串,这是正确的版本

      您可以为javascript验证创建自己的正则表达式

          /^            : Start
          (?=.{8,})        : Length
          (?=.*[a-zA-Z])   : Letters
          (?=.*\d)         : Digits
          (?=.*[!#$%&? "]) : Special characters
          $/              : End
      
      
      
              (/^
              (?=.*\d)                //should contain at least one digit
              (?=.*[a-z])             //should contain at least one lower case
              (?=.*[A-Z])             //should contain at least one upper case
              [a-zA-Z0-9]{8,}         //should contain at least 8 from the mentioned characters
      
              $/)
      
      Example:-   /^(?=.*\d)(?=.*[a-zA-Z])[a-zA-Z0-9]{7,}$/
      

      我使用下面的脚本来表示至少8个字母的密码,至少有一个符号、大写字母和小写字母以及一个数字

      function checkPassword(str)
      {
          var re = /^(?=.*\d)(?=.*[!@#$%^&*])(?=.*[a-z])(?=.*[A-Z]).{8,}$/;
          return re.test(str);
      }
      

      密码的正则表达式:

      /^(?=.*\d)(?=.[A-Z])(?=.[A-Z])(?=.[A-zA-Z!#$%&])[A-zA-Z0-9!#$%&]{8,20}$/

      我花了一段时间才弄明白限制,但我做到了

      限制:(注意:我使用了>8,20}
    • 最多20个字符
      {8,>>20}
    • 至少一个大写字符
      (?=.[A-Z])
    • 至少一个小写字符
      (?=.[a-z])
    • 至少一位数字
      (?=.*\d)

    • 至少有一个特殊字符
      (?=.[a-zA-Z>!#$%&?!#$%&?!#$%&?经过大量研究,我终于想出了这个。它有更多的特殊字符

      validatePassword(password) {
              const re = /(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*()+=-\?;,./{}|\":<>\[\]\\\' ~_]).{8,}/
              return re.test(password);
          }
      
      validatePassword(密码){
      常数re=/(?=..*\d)(?=.[a-z])(?=.[a-z])(?=.[!@$%^&*(+=-\?;,./{}\\\\”:\[\]\\\\'~)。{8,}/
      返回重新测试(密码);
      }
      
      当您重新创建帐户密码时,请确保它是8-20个字符,包括数字和特殊字符,如
      \\\/*
      -然后验证新密码并重新输入完全相同的密码,应该可以解决密码验证的问题

      这对我来说非常有效,我相信对你们来说也会很容易且准确地签出密码

      var regix = new RegExp("^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#\$%\^&\*])(?=. 
                  {8,})");
      
      if(regix.test(password) == false ) {
           $('.messageBox').html(`<div class="messageStackError">
             password must be a minimum of 8 characters including number, Upper, Lower And 
             one special character
           </div>`);
      }
      else
      {
              $('form').submit();
      }
      
      var regix=new RegExp(“^(?=.[a-z])(?=.[a-z])(?=.[0-9])(?=.[!@\\$%\^&*])(?=。
      {8,})");
      if(regix.test(密码)==false){
      $('.messageBox').html(`
      密码必须至少包含8个字符,包括数字、大写、小写和小写
      一个特殊的角色
      `);
      }
      其他的
      {
      $('form').submit();
      }
      
      你说它没有被计算是什么意思?如果新密码至少应该包含一个数字和一个特殊字符。即使没有这些条件,密码剑也会被更新。我想我的正则表达式有一些问题。为什么要设置这样一个任意的最大长度?可以将正则表达式缩短为
      /^(?=.[\d])(?=.[!@$%^&*])[\w!@$%^&*]{6,16}$/
      /^(?=.[0-9])(?=.[!@$%^&*])[a-zA-Z0-9!{6,16}$/12345678@12)将返回true。如果我想强制包含字母表怎么办?有人知道如果我
      var regexPttn=new RegExp(“/^(?=.*[0-9])(?=.[!@$%^&*])[a-zA-Z0-9!@$%^&*]这个正则表达式为什么不起作用吗{6,16}$/”;
      由于某种原因,使用创建者会破坏它。@Bhuvan我使用此答案来改进提供的表达式。首先,包括更多特殊字符[空格、连字符、问号、斜杠、反斜杠]最重要的是,我增加了最小字符数,因为6个字符的密码是非常不安全的,尤其是在没有登录失败监控和/或2FA的情况下。也就是说,我得出这样的结论:
      ^(?=.[0-9])(?=.[-?!@$%^&*/\])(?=.[A-Z])(?=.[A-Z])[A-zA-Z0-9-!%^&*/\]{8,30$
      [a-zA-Z0-9!@$%^&*]{6,16}
      {6,16}
      以便您可以输入任何字符(只要密码包含数字和特殊字符)。我不认为有任何理由拒绝密码
      var regix = new RegExp("^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#\$%\^&\*])(?=. 
                  {8,})");
      
      if(regix.test(password) == false ) {
           $('.messageBox').html(`<div class="messageStackError">
             password must be a minimum of 8 characters including number, Upper, Lower And 
             one special character
           </div>`);
      }
      else
      {
              $('form').submit();
      }