JavaScript正则表达式?

JavaScript正则表达式?,javascript,Javascript,这是regexp: $("#newpassword").keyup(function(e) { var htm = ""; var pass = this.value; var length = this.value.length; if (pass) { var score = 0; if(length >= 8 && length <= 16) { //PASSWORD MIN/MAX NUMBER OF CHARACTERS

这是regexp:

$("#newpassword").keyup(function(e) { 
  var htm = "";
  var pass = this.value;
  var length = this.value.length;

  if (pass) {
    var score = 0;
    if(length >= 8 && length <= 16) { //PASSWORD MIN/MAX NUMBER OF CHARACTERS

      var upper = /[A-Z]/;
      var lower = /[a-z]/;

      var number = /^[0-9]+$/; //PATTERN FOR NUMBERS
      var schar = /[!@#$%^&*?_~+-=<>]/;

      //LOOPS THROUGH PASSWORD TO CHECK FOR AT LEAST ONE OF EACH PATTERN
      for (i = 0; i < length; i++) {
        if (pass.substr(i, 1).match(upper)) {
          var uletters = true;
          score ++;     
          //AT LEAST ONE LETTER EXISTS
        }
        if(pass.substr(i,1).match(lower)) {
          var lletters = true;
          score++; 
          //AT LEAST ONE LETTER EXISTS
        }
        if(pass.substr(i,1).match(schar)) {
          var schar = true;
          score++;
        }
        if(pass.substr(i, 1).match(number)) {
          var numbers = true; 
          var schar = false;
          //AT LEAST ONE NUMBER EXISTS
          score++;
        }
      }
    }
  }
});
$(“#新密码”).keyup(函数(e){
var htm=“”;
var pass=此值;
变量长度=this.value.length;
如果(通过){
var得分=0;

如果(length>=8&&length,您可能可以使用RegExp.test()或RegExp.exec()在字符串中“查找”正则表达式匹配项,而不是自己迭代字符

function validatePwd (pwd) {
    if (pwd.length < 8)
        return false;
    if (pwd.length > 16)
        return false;

    var upperPatt =  /[A-Z]/;
    var lowerPatt =  /[a-z]/;
    var numberPatt = /[0-9]/;   // FIXED -- this is a better pattern for numbers.
    var scharPatt =  /[!@#$%^&*?_~+-=<>]/;

    score = 0;
    if (upperPatt.test( pwd))
        score++;
    if (lowerPatt.test( pwd))
        score++;
    if (numberPatt.test( pwd))
        score++;
    if (specialPatt.test( pwd))
        score++;

    // don't make it too hard for the poor user, please..  
    //    -- they have to type all this horrible rubbish.
    if (score < 3) {    
        return false;
    }

    // OK.
    return true;
}
功能验证EPWD(pwd){
如果(pwd长度<8)
返回false;
如果(焊件长度>16)
返回false;
var upperPatt=/[A-Z]/;
var lowerPatt=/[a-z]/;
var numberPatt=/[0-9]/;//已修复--这是一种更好的数字模式。
var scharPatt=/[!@$%^&*?+-=]/;
得分=0;
if(上部零件试验(pwd))
分数++;
if(下击试验(pwd))
分数++;
if(数字附件测试(pwd))
分数++;
if(特殊测试(pwd))
分数++;
//请不要让这对可怜的用户来说太难了。。
//他们得把这些可怕的废话都打出来。
如果(分数<3){
返回false;
}
//嗯。
返回true;
}

您不需要迭代密码的每个字符,只需执行以下操作:

score += upper.test(password)?1:0;
score += lower.test(password)?1:0;
score += number.test(password)?1:0;
score += schar.test(password)?1:0;
test
返回true或false)然后检查分数


一般来说,建议不要对用户密码太过严格。如果告诉用户密码应该是什么样子,会严重损害用户体验。不过,您可以将其作为建议。(例如,显示一个栏:弱(红色)-强(绿色)密码。这比用任何错误消息骚扰用户更有激励作用。)让他们通过2分或更高的分数。

如果你花时间格式化问题,使其易于阅读,这将有助于你更快地得到更好的答案。将问题以代码缩进的方式发布,没有充分的理由,也不能做到这一点。此外,你的代码不完整(语法错误,至少缺少三个
s)。我本来想帮你清理一下,但我不想引入误导性的缩进。
score+=upper.test(password)?1:0;
可以缩短为
score+=+upper.test(password);
甚至一元+都是不必要的。因此,你的答案可以被编码为
score+=upper.test(password)+lower.test(password)+)+number.test(密码)+schar.test(密码);
@HBP确保你可以玩任意数量的代码游戏。但是,你只写一次代码,但至少读了10次。我总是喜欢可读性而不是紧凑性。每一个让你觉得不必要的代码可能都太模糊了(比如你的上一个例子)。我也不会使用类型强制进行如此大规模的扩展。请始终想想那些不得不重新阅读您的代码的可怜的同事。。)hai,上面的代码在数字和字符方面都很好。但是用户类型数字显示分数值是2。numberpatt和specialpatt有什么问题。有人可以帮我吗。我想没有允许的空格。我认为数字模式(你最初给出的)被破坏了。无论如何,请+1回答。