电话号码的jQuery输入掩码

Posted

技术标签:

【中文标题】电话号码的jQuery输入掩码【英文标题】:jQuery input mask for phone number 【发布时间】:2017-08-25 02:39:55 【问题描述】:

我希望用户输入自动填充电话号码的标点符号,以便看起来像 (xxx) xxx-xxxx。这是我的 html 代码:

  <div class="form-group">
    <label class="control-label col-sm-2">Phone Number:</label>
    <div class="col-sm-10">          
      <input type="text" class="form-control" name="phoneNumber"
           id="phoneNumber" value="<?php echo $row["phoneNumber"];?>">
    </div>
  </div>

我还需要做什么才能完成这项任务?我正在尝试使用 jQuery 和输入掩码。

【问题讨论】:

【参考方案1】:

您可以使用Input Mask jQuery 扩展来完成此操作。

$('#phoneNumber').inputmask("(999) 999-9999");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://rawgit.com/RobinHerbots/jquery.inputmask/3.x/dist/jquery.inputmask.bundle.js"></script>

<label class="control-label col-sm-2">Phone Number:</label>
  <div class="col-sm-10">          
  <input type="text" class="form-control" name="phoneNumber" id="phoneNumber" value="">
</div>

【讨论】:

非常适合我!除非您需要在最后一组数字中添加额外的 9。应该是“(999) 999-9999” 效果很好,但是 226kb 的文件大小相当大。有没有办法只为电话号码获取更小的 jQuery 输入掩码? $("#pr_phone").inputmask("+9 999 999 9999", onKeyValidation: function (key, result) );我已经像这个例子一样添加了它。但我想为国家代码设置“+1”,这样任何人都无法更改它。请建议。谢谢。【参考方案2】:

目前用于检测全球任何类型的电话号码,phone extension 更合适,因为它已经在 preexisting array of masks 中进行检查(无需定义掩码):

let allIns = document.querySelectorAll("input");
Inputmask().mask(allIns);
[...allIns].map(el => el.setAttribute('placeholder', "+#(###)-###-####"));

$('#jqp input').inputmask("phone", 
  placeholder: '#',
  showMaskOnHover: false,
  onKeyValidation: function () 
    let mt = $(this).inputmask("getmetadata");
    $('#jqp span').text(`$mt['cd'] ($mt['cc'])`);
    //console.log(mt);
  
);

Inputmask.extendAliases(
  my_phone: 
    alias: "abstractphone",
    placeholder: '#',
    phoneCodes: [
      mask: "+987-####",
      cc: "zz",
      cd: "zzzz",
      desc_en: "Moon!",
      name_ru: "яяя",
      desc_ru: ""
    , 
      mask: "+789-###",
      cc: "yy",
      cd: "Y-Y",
      desc_en: "Sun!"
    ],
    onKeyValidation: function() 
      let mt = $(this).inputmask("getmetadata");
      $('#jqma span').text(mt['desc_en']).css('color',
      `#$Math.floor(Math.random() * 0x1000000).toString(16).padStart(6, 0)`);
      //console.log(mt);
    
  
);
$('#jqma input').inputmask("my_phone");
span color:#37e;font-weight:bold
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<script src="https://rawgit.com/RobinHerbots/jquery.inputmask/4.x/dist/inputmask/inputmask.js"></script>
<script src="https://rawgit.com/RobinHerbots/jquery.inputmask/4.x/dist/inputmask/inputmask.extensions.js"></script>
<script src="https://rawgit.com/RobinHerbots/jquery.inputmask/4.x/dist/inputmask/inputmask.phone.extensions.js"></script>
<script src="https://rawgit.com/RobinHerbots/jquery.inputmask/4.x/dist/inputmask/jquery.inputmask.js"></script>
<script src="https://rawgit.com/RobinHerbots/jquery.inputmask/4.x/dist/inputmask/phone-codes/phone.js"></script>
<p>
<label>Old simple HTML data + JS:      
<input type="text" data-inputmask="'mask': '+9(999)-999-9999', 'showMaskOnHover': false, 'placeholder': '#'" >
</label>
</p>

<p id="jqp"><label>jQuery phone extension alias: <input/></label> <span/>
</p>
<p id="jqma"><label>jQuery extended phone alias: <input/></label> <span/>
</p>

然而,phone.js 实际上为我们提供了一个巨大的alias,在其中动态访问每个项目的详细信息/元数据(例如国家/地区) ) 在用户输入时是可能的(输入 2nd 输入以查看它)。因此,您还可以根据这个庞大的数组(3rd 输入)创建自己的电话分机

这和以前的Inputmask 一样(现在也可能没有 jQuery)。上面我刚刚描绘的:

    只需使用 HTML 的data- 属性; 直接使用稍加定制的电话分机(例如更改占位符); 定义一组特定的电话号码,以便通过电话分机进行验证,只需在扩展时使用alias: "abstractphone"

【讨论】:

【参考方案3】:

输入掩码的工作示例:

https://rawgit.com/RobinHerbots/jquery.inputmask/3.x/dist/jquery.inputmask.bundle.js

<input id="phn-number" class="ant-input" type="text" placeholder="(XXX) XXX-XXXX" data-inputmask-mask="(999) 999-9999">


jQuery( '#phn-number[data-inputmask-mask]' ).inputmask();

【讨论】:

以上是关于电话号码的jQuery输入掩码的主要内容,如果未能解决你的问题,请参考以下文章

javascript Igor Escobar Jquery输入掩码11位数字电话

应用 jQuery 掩码不支持 0 作为占位符的默认值

ios中的电话号码格式掩码

Jquery验证字符串长度预先替换字段字符

EditText 的 Android 电话号码掩码

如何将手机号码中间做掩码,四个常用文本操作技巧