【问题标题】:validate american format of phone number验证电话号码的美国格式
【发布时间】:2011-08-16 01:27:17
【问题描述】:

我想验证电话和传真号码字段。我想验证它们,因为电话号码和传真是以美国格式提供的。我已经搜索但没有成功。任何人都可以帮助我如何以以下格式验证

Edit 1 (415) xxx xxxx

【问题讨论】:

  • 请说明您认为可接受的数字格式,以及不可接受的数字格式。例如,以下哪些对您有效:“+1 303 433 1321”、“1-303-343-1341”、“(333) 341-1234”、“333.123.1234”、“333-123- 1234”,“3331231234”。
  • 你熟悉正则表达式吗?问题US Phone Number Verification 包含一个好问题。
  • @benjynito 这个问题是关于验证数字的存在,而不是格式。
  • 如果只是电话号码字段,则不需要正则表达式。您只需要十位数字,输入它的人实际给出的格式与 IMO 无关。编辑:除了摆脱数字以外的所有东西......哎呀。

标签: javascript validation


【解决方案1】:

这是我使用 (jQuery) 进行字段验证 onBlur 的一个:

http://jsfiddle.net/userdude/Ju72W/

jQuery(document).ready(function($){
    $cf = $('#customfield_10117');
    $cf.blur(function(e){
        phone = $(this).val();
        phone = phone.replace(/[^0-9]/g,'');
        if (phone.length != 10) {
            e.preventDefault();
            if (confirm('Phone number must include area code and prefix.')) {
                setTimeout(function(){$cf.focus()}, 0);
            }
        } else {
            area = phone.substring(0,3);
            prefix = phone.substring(3,6);
            line = phone.substring(6);
            $(this).val('(' + area + ') ' + prefix + '-' + line);
        }
    });
});

它检查是否提交了 10 个数字,如果是,则重新格式化为 (000) 000-0000 格式。

编辑

使用相同技术的函数(添加了国家代码限定符)。

http://jsfiddle.net/userdude/Ju72W/1/

jQuery(document).ready(function($){
    $cf = $('#customfield_10117');
    $cf.blur(function(e){
        number = phoneCheckAndFormat(this.value, 11);
        if (number === false) {
            alert('Entered phone number is not correct.');
            return;
        }
        $(this).val(number);
    });
});

function phoneCheckAndFormat(phone, digits) {
    phone = phone.replace(/[^0-9]/g,'');
    digits = (digits > 0 ? digits : 10);
    if (phone.length != digits) {
        return false;
    } else {
        code = '';
        if (digits == 11) {
            code = '1 ';
            phone = phone.substring(1);
        }
        area = phone.substring(0,3);
        prefix = phone.substring(3,6);
        line = phone.substring(6);
        return code + '(' + area + ') ' + prefix + '-' + line;
    }
}

【讨论】:

    【解决方案2】:

    我猜,如果您有意将您的功能限制为美国格式的电话号码,那么使用正则表达式是可以的。

    但是,一旦您的代码必须处理国际问题,该方法就不再是最合适的选择。如果您有任何此类计划,并且由于您使用的是 JavaScript,我建议您查看 Google 的 libphonenumber

    【讨论】:

      【解决方案3】:

      最好的方法是删除所有非数字,然后自己将其格式化为您喜欢的格式。

      var raw_number = str.replace(/[^0-9]/g,'');
      var regex1 = /^1?([2-9]..)([2-9]..)(....)$/;
      if(!regex1.test(raw_number)) {
          // is invalid...
      } else {
          var formatted_number = str.replace(regex1,'1 ($1) $2 $3')
      }
      

      这样,如果他们输入234/555-0123,它将成为您首选的1 (234) 555 0123格式。

      【讨论】:

      • 这是我发布的更简化的版本,除了我不使用第二个正则表达式。
      【解决方案4】:

      以下 Javascript 正则表达式验证 123-456-7890 或 123.456.7890 或 1234567890 或 123 456 7890 或 (123) 456-7890

      ^[(]{0,1}[0-9]{3}[)]{0,1}[-\s\.]{0,1}[0-9]{3}[-\s\.]{0,1}[0-9]{4}$
      

      【讨论】:

        【解决方案5】:

        PhoneFormat.com 有一个 JavaScript 库,可以非常轻松地格式化和验证数字。

        【讨论】:

          猜你喜欢
          • 2012-05-22
          • 2010-09-15
          • 2015-01-19
          • 1970-01-01
          • 1970-01-01
          • 2011-09-21
          • 1970-01-01
          • 2010-10-14
          • 2011-03-22
          相关资源
          最近更新 更多