0

我必须制作一个脚本来检查两次出现的相同字符的输入框(密码)。这应该与正则表达式验证一起使用(这已经完全有效)。
为了成功,我知道我需要以某种方式使用 (for?) 循环,以检查一个字符是否出现两次。现在这是一种奇怪的要求。我知道。但我并不完全确定该功能的条件。如果有人对如何做到这一点有任何建议,那就太好了。一个示例:“ABad12” - 将通过,而“AbAc12”将返回 false。提前致谢。

function checkForm(form)


{

 var re = /^\w{6,10}$/;

  if(!re.test(form.pwd1.value)) {
  alert("Error: Password has to be in-between 6-10 characters!");
  form.inputfield.focus();
  return false;
  }


}

上面是我想将它与什么脚本结合起来的一个例子(以及更多的正则表达式验证)。

4

3 回答 3

1

我就是这样做的:

var str = "ABad12",
    valid = str.split("").filter(function(e, i, a) {
        return a.indexOf(e) !== i;
    }).length === 0;

if (!valid) {
    // ...
}

但请注意,数组filter()方法在旧浏览器中不可用,因此请提前查看浏览器兼容性页面。

于 2013-05-18T18:37:52.663 回答
0

这是简单的(虽然有点蛮力)代码,纯 JavaScript,没有正则表达式:

function check(s) {
  var i;
  for(i = 0; i < s.length - 1; i++) {
    if(s.indexOf(s.substring(i,i+1), i+1) >= 0) {
      return false;
    }
  }
  return true;
}

它只是从头开始处理字符串并检查每个字符是否该字符稍后出现在字符串中。

如果将其集成到代码中,则可以发出特定消息。之前return false,您可以调用一个错误报告函数来要求它显示,例如'Error: character “' + s.charAt(i) + '” appears more than once.'

于 2013-05-18T19:31:47.970 回答
0

您不需要 for 循环。一个简单的正则表达式就足够了:

(\w)\1+


var validateRegEx=/(\w)\1+/;
validateRegEx.test("aa") -> return true;
validateRegEx.test("ab") -> return false;
于 2013-05-18T18:38:19.800 回答