【问题标题】:jQuery Phone validation not working as expectedjQuery Phone 验证未按预期工作
【发布时间】:2015-06-18 04:04:20
【问题描述】:

我一直在尝试在 jQuery 中验证电话号码,但由于某种原因,代码无法按预期验证条件。

HTML 代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
<script src="jquery-1.11.2.js"></script>
<script type="text/javascript" src="custReg.js"></script>

<link rel="stylesheet" type="text/css" href="custRegistration.css">
</head>
<body bgcolor ="lightgray" fontcolor="red">
    <form action="" name="myForm" method="get" onsubmit="">

        <div id="container">
            <fieldset>
                <legend style="background-color: aqua;">Registration Page</legend>
    <div id="primaryContact">Primary Contact No.</div>
                <div id="alternateContact">Alternate Contact No.</div>  

                <div id="contactNoBlock">
                    <input type="text" name="primaryNumber" value="+91-" id="primaryNumber"  class="textBox1" />   <!--  -->
                    <input type="text" name="altNumber" value="+91-" id="altNumber" class="textBox1" />
                </div>

                <div id="contact_error_msg"></div>
                <br>
</div> <!-- <div id="container"> closes here  -->

        </fieldset>

    </form>
</body>
</html>

CSS 代码:

fieldset {
    width: 120%;
    border: solid 1px black;}

legend {
    color: black;
    font-style: italic;
    font-size: 15px;
    border: solid 1px black;
    margin: 25px; } 


.textBox1 {
    margin: 10px;
    padding: 5px;
    width: 280px;}

#primaryContact{
    margin-left:10px;
    font-style: italic;
    font-weight: bold;
    color: #a77;
    position: relative;
    top:12px;

}

#alternateContact{

    font-style: italic;
    font-weight: bold;
    color: #a77;
    position: relative;
    left: 335px;
    top:-5px;

}

jQuery 代码:

$(document).ready(function() {
    var altContactNo = $('#altNumber');
    var contactErrorMsg = $('#contact_error_msg');
    var regexIn = /\(?([0-9]{3})\)?([ .-]?)([0-9]{3})\2([0-9]{4})/ ;

    $(altContactNo).blur(function(){

     var value = $(altContactNo).val();  
     alert(value);


     if(value.length<=4){     
      $(contactErrorMsg).text("Please enter Alternate Contact Number");
      $(this).css('border','1px solid red');
   }

     else if(!regexIn.test(value)){
         $(contactErrorMsg).text("Only digits accepted "); 
         $(this).css('border','1px solid red');  
     }

     else if ((value.length>=4) && (value.length<=14)){
         $(contactErrorMsg).text("Number should be exact 10 digits"); 
         $(this).css('border','1px solid red'); 
    } 



     else{
          $(this).css('border','1px solid green');
          $(contactErrorMsg).text(""); 
         }

});


});

我在使用此代码时面临的挑战:

  • 当我输入任何非数字数字时,代码将错误显示为 预期 - "Only digits accepted" 但是,一旦我删除 非数字并用数字替换它,同样的错误 消息仍然存在,这是不正确的。

  • 要消除上述错误,我需要等到数字计数达到 10 位 (因为我的目标是 10 位单元格编号)。在整个过程中,上述错误信息不断出现。假设我输入数字为 785 并从输入框出来,它应该抛出 "Number should be exact 10 digits" error-message 直到它达到 10数字计数。但是,目前还没有发生这种情况。

  • 此外,即使计数超过规定的 10 位数标记,也不会显示错误消息。我想要的是,after 10-digits mark is crossederror-message should flash stating "Number should be exact 10 digits" 和框应该变成红色。

如何解决上述问题? 任何帮助将不胜感激。

【问题讨论】:

  • 问一个问题。
  • @AvinashRaj - 尝试运行代码,你就会明白我在说什么。问题可能看起来很长,但它只是一个问题。
  • 使用keypress而不是blur,使用html5的maxlength属性防止>10位数。
  • 我还没准备好运行你的代码,因为我不是 js 背景。如果您减少问题的长度,您的问题就会得到解决。而不是发布整个代码,您可能会问,“嘿,我希望密码字段允许这个和这个字符,但不允许这个。我试过这个,但它失败了,”就像那样。
  • 顺便提一下,altContactNo 已经是一个 jQuery 对象。不需要$(altContactNo)contactErrorMsg 也是如此。

标签: jquery regex validation


【解决方案1】:

您正在针对正则表达式进行验证,并且当它与正则表达式出于任何原因不匹配时,您会显示“仅接受数字”。这意味着只要输入的内容不匹配,无论是由于字符选择还是长度或间距,您都会看到此消息。

出于同样的原因,您没有看到“数字应该是精确的 10 位数字”消息,因为当数字少于 10 位时,它与正则表达式不匹配并落入第二个 if 子句。

根据不同语言处理正则表达式验证的方式,某些实现将允许多个匹配项。如果是这种情况,那么“1234567890123”可以匹配,因为“1234567890”匹配。尝试将“^”放在正则表达式的开头,将“$”放在正则表达式的末尾,这将限制验证使其仅匹配一次。

【讨论】:

  • @lonsberry - 不幸的是,当我将 "^" 放在正则表达式的开头并将 "$" 放在正则表达式的末尾时,代码没有产生任何结果。在发布问题之前确实尝试过这个技巧,但没有产生任何成果。
  • @Lonsberry - jQuery 文件根本不运行。
  • 确保将它们放在“/”中,在这种情况下,它充当分隔符。
  • 另外,仔细检查你的第三个 if 测试中的逻辑,我认为你做的与你的意图相反。
  • @Lonsberry - 结果相同。 收到错误消息为“无效的正则表达式组”
【解决方案2】:

这并不能直接回答您的问题,但您也可以根据 HTML5 中的输入中引入的属性来验证输入字段,模式。像这样:

<input type="tel" pattern="\+91\-[0-9]{3}[ .-][0-9]{3}[ .-][0-9]{4}" value="+91-" />

结果:

http://jsfiddle.net/wojtekmaj/g28cqnLw/

另外,在我看来,如此严格的数字验证应该只用于如果用户没有输入您想要的精确格式而可能出现严重错误的情况。这对用户体验来说太糟糕了。

【讨论】:

  • @Maj - 我自己找到了解决方案...感谢您的努力!
猜你喜欢
  • 2014-07-15
  • 1970-01-01
  • 2013-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-27
  • 2012-09-28
相关资源
最近更新 更多