【问题标题】:Javascript, check for identical charactersJavascript,检查相同的字符
【发布时间】:2013-05-18 18:33:17
【问题描述】:

我必须编写一个脚本来检查输入框(密码)是否有两次出现的相同字符。这应该与正则表达式验证一起使用(这已经完全有效)。
为了成功,我知道我需要以某种方式使用 (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;
  }


}

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

【问题讨论】:

    标签: javascript validation loops for-loop character


    【解决方案1】:

    我会这样做:

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

    但请注意,数组filter()方法在旧浏览器中不可用,请提前查看browser compatibility page

    【讨论】:

    • 抱歉耽搁了,不得不考虑一下。但是如果使用这段代码,它可以加载一个有效的函数,对吧?如果我希望它与我当前的正则表达式一起用于大写、小写和数字字符。当所有条件都得到验证时,我可以触发这个函数吗?我想这需要稍微重写一下才能使用我当前的代码。我还是个初学者,所以对我来说很难想象最终结果。跨度>
    • @Holmberg 最好将您的代码包含在问题正文中,以便我们为您提供更精确的解决方案。
    • 我从你的回答中意识到了这一点,所以我现在已经这样做了,我认为这已经足够了,但如果有必要我可以包括更多。
    • 很抱歉让您这么痛苦,但据我了解,无论您输入的字符太少(如我的正则表达式),或者您输入两个相同的字符,您都会收到一条通知字符 - 无论哪种方式,您都会收到相同的警报。但是,如果我希望这两个条件都生成自己的警报,并且仍然让它们都按应有的方式工作。那怎么可能呢?或者我可以使用您展示的代码,只是将正则表达式与它分开?
    • @Holmberg 对不起,我不懂瑞典语,所以我无法确定我们是否可以在一个警报下合并两个检查:) 只需将它们分成单独的 if 和它应该如你所愿。我在瑞典语中的尝试:jsfiddle.net/4mCAk/1 :)
    【解决方案2】:

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

    (\w)\1+
    
    
    var validateRegEx=/(\w)\1+/;
    validateRegEx.test("aa") -> return true;
    validateRegEx.test("ab") -> return false;
    

    【讨论】:

    • 这仅适用于一个接一个的字符,这不是唯一的情况。
    【解决方案3】:

    这是简单(虽然有点暴力)的代码,纯 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.'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-23
      • 2018-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多