【问题标题】:jQuery validate phone number with with RegExjQuery 使用 RegEx 验证电话号码
【发布时间】:2011-08-07 05:26:31
【问题描述】:

我有一个简单的 ajax 表单,我正在尝试验证它

  1. 有值
  2. 该值是一个 10 位数字

我正在尝试使用 RegEx 来执行此操作。这是我到目前为止所拥有的。

var reg = new RegExp("/[0-9]{10}/");
$("#call_form").bind("submit", function() {
       if ($("#call_number").val().length < 1 && reg.test($("#call_number").val())) {
               $("#call_error").show();
                return false;
        }
});

我知道问题与正则表达式有关,就好像我删除了验证框是否具有值的这部分代码一样。

编辑:这是我使用的最终正则表达式

var regEx = new RegExp("/[0-9]/");

$("#call_form").bind("submit", function() {

    if ($("#call_number").val().length != 10 && !$("#call_number").val().match(regEx)) {
        $("#call_error").show();
        $.fancybox.resize();
        return false;
    }
});

编辑 2 使用这里的建议是我正在使用的,它允许空格和破折号,然后在检查时被剥离

    $("#call_form").bind("submit", function() {
var Phone = $("#call_number").val().replace(/\D+/g,'');

if (Phone.length != 10) {
        $("#call_error").show();
        $.fancybox.resize();
        return false;

    }
});

【问题讨论】:

  • 那个正则表达式只会检查字符串中是否至少有一个数字。您应该保留{10} 以确保它是所有数字。
  • @tjameson 好的,如果我保留{10},我应该可以放弃length != 10 对吧?还是最好不要?
  • 是的,但你应该两者都有。如果正则表达式匹配字符串的任何部分,reg.test 将返回 true。
  • 或者您可以使用 ^ 和 $ 锚定您的正则表达式:/^[0-9]{10}$/ 我认为是语法。
  • 我还想指出,您似乎忽略了人们喜欢将(555)555-5555 等放入电话号码字段的事实,我个人在输入我的时一直使用555.555.5555当一些写得不好的正则表达式拒绝我时,我会讨厌它...删除所有非数字,然后检查 .length &gt;= 10 以确保至少 10 个数字...

标签: javascript jquery regex validation


【解决方案1】:

这是我使用的 - 它很简单,如果有人正在搜索相同的内容,只需发布​​。

var a = PHONE_FROM_FIELD;
var filter = /^[0-9-+]+$/;
if (filter.test(a)) {
     return true;
}
else {
     return false;
}

干杯!

【讨论】:

    【解决方案2】:

    您的正则表达式对我来说很好...您可以将其缩短为 /[0-9]{10}/

    你的问题在这里:

    $("#call_number").val().length &lt; 1。如果数字是 10 个字符长,它永远不会小于 1,不是吗?

    你的意思可能是这样的:

    $("#call_number").val().length === 10

    【讨论】:

    • 没错,我选择了两个答案的组合。
    • 应该是/^\d{10}$/——如果你想确保没有别的东西就需要锚点,否则11个数字会通过,12个字母、10个数字和一些符号也会通过
    • 是的,\d 更简单。在问题的答案中,我给了他锚点。
    【解决方案3】:

    没有人说您最初的努力出了什么问题 - 是斜线 (/)。当调用 RegExp 作为构造函数时,您不需要斜杠(这是表示正则表达式的标记),例如:

    var re = /\w+/i;
    

    相当于:

    var re = new RegExp('\\w+','i');
    

    请注意,您必须为特殊字符引用反斜杠。

    最后一件事 - 在数字中允许空格。不过,您可以在测试或存储之前删除它们。用户发现读取 3 位或 4 位数字块中的数字要容易得多,例如

    • 1234 871 098 比 1234871098 更容易阅读。

    【讨论】:

    • 不错的收获!我完全只是阅读它而没有标记它......;)
    【解决方案4】:

    类似这样的:

    var regEx = /^(\+\d)*\s*(\(\d{3}\)\s*)*\d{3}(-{0,1}|\s{0,1})\d{2}(-{0,1}|\s{0,1})\d{2}$/;
    $("#call_form").bind("submit", function() {
           var val = $("#call_number").val();
           if (!val.match(regEx)) {
                $("#call_error").show();
                return false;
            }
    });
    

    【讨论】:

    • 这个正则表达式更完整,并且会解析它看起来像的破折号。但请注意,match 返回一个匹配数组。
    • 我编辑了问题以包含解决方案。我使用简单的正则表达式只是意味着没有空格。
    【解决方案5】:
    function validate_Phone_Number() {
        var number = $('field_Id').val();
        var filter = /^((\+[1-9]{1,4}[ \-]*)|(\([0-9]{2,3}\)[ \-]*)|([0-9]{2,4})[ \-]*)*?[0-9]{3,4}?[ \-]*[0-9]{3,4}?$/;
        if (filter.test(number)) {
            return true;
        }
        else {
            return false;
        }
    }
    

    【讨论】:

      【解决方案6】:

      使用 jquery 对 keypress 和 keyup 使用相同的验证,为我工作

      jquery 代码

          const goodColor = "#0C6";
          const badColor = "#FF0000";
      
          const $mobile_validation = $('#mobile_validation');
          
      $('#mobile').on('keyup keypress', function(e) {
                  if (e.which == 46 || e.which == 45 || e.which < 48 || e.which > 57) {
                          event.preventDefault();
                      }
          
                      if(this.value.length !=10 ){
                          $mobile_validation.text("Please enter 10 digit mobile number ");
                          $mobile_validation.css("color", badColor);
                      }
          
                      if(this.value.length ===10 ){
                          $mobile_validation.text("Good!");
                          $mobile_validation.css("color", goodColor);
                      }
                  });
      

      html代码

      <input type="text" id="mobile" class="form-control" name="telephone" maxlength="10">
      <span id="mobile_validation"></span>
      

      【讨论】:

        【解决方案7】:
        // check phone number validation
                function validatePhoneNumber(number)
                {
                    count=number.length;
                    if(number[0]!=" " && number[0]!="-" && number[count-1]!=" " && number[count-1]!="-")
                    {
                        temp=number.replace(" ", "");
                        temp=temp.replace("-", "");
                        if($.isNumeric(temp))
                        {
                            if(temp.length>=7 && temp.length<=12)
                            {
                                flag=1;
                                for(i=1;i<count;i++)
                                {           
                                    if(number[i]=="-" || number[i]==" ")
                                    {
                                        if(number[i-1]=="-" || number[i-1]==" " || number[i+1]=="-" || number[i+1]==" ")
                                        {
                                            flag=0;
                                        }
                                    }               
                                }
        
                                if(flag==1)
                                {
                                    valid=1;
                                }
                                else
                                {
                                    valid=0;
                                }
                            }
                            else
                            {
                                valid=0;
                            }
                        }
                        else
                        {
        
                            valid=0;
                        }
        
                    }
                    else
                    {
                        valid=0;
                    }
                    return valid;
                }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-03-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-01-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多