仅在输入掩码 jquery 中从某个号码开始验证电话号码

Posted

技术标签:

【中文标题】仅在输入掩码 jquery 中从某个号码开始验证电话号码【英文标题】:Validate phone number with starting from certain number only in inputmask jquery 【发布时间】:2016-11-15 12:30:09 【问题描述】:

我正在尝试验证电话号码,如下所示。在 61 之后,它应该只从 2 或 3 或 6 开始。示例如下。 61-245623463:有效 61-345623456:有效 61-445623423:无效 61-645623485:有效

我当前的代码如下。但它不起作用。

$("#mask_aus_phone").inputmask(mask: "61-2 9999 9999");
$("#mask_aus_phone").inputmask(mask: "61-3 9999 9999");
$("#mask_aus_phone").inputmask(mask: "61-6 9999 9999");

我也尝试如下。但它也不起作用。

$("#mask_aus_phone").inputmask(mask: "61-2,3,6 9999 9999");

谁能帮我验证一下。

【问题讨论】:

【参考方案1】:

您可以将正则表达式输入到输入掩码中:

$('#mask_aus_phone').inputmask('Regex',  
    regex: "^61-[236]"
);

我使用了正则表达式 ^61-[236],但您也可以使用正向预测并断言 61- 后面的数字是 2、3 或 6:

^61-(?:(?=[236]).)+

更新:

你没有说清楚,但是如果你想将61-之后的总位数限制为9,那么你可以试试:

^61-[236]\d8$

演示:

Regex101

【讨论】:

嗨蒂姆,它工作正常。你能指导我在输入 2 或 3 或 6 后如何限制数字。非常感谢。 感谢您的回复。最后一个正则表达式似乎不适用于我的网站。输入 61-2 后,不允许输入任何数字。可能是什么问题。我的代码是 $('#mask_aus_phone').inputmask('Regex', regex: "^61-[236]\d8$" ); 试试这个:^61-[236][0-9]8$... 每个正则表达式引擎都有自己的风格和做事方式。无论如何,我给出的正则表达式应该适用于大多数引擎。【参考方案2】:

不用正则表达式,你可以通过最近的phone extension构建一个小字典:

Inputmask.extendAliases(
  my_phone: 
    alias: "abstractphone",
    placeholder: '#',
    showMaskOnFocus: false,
    phoneCodes: [
      mask: "61-2 #### ####",
      region_name: 'Dois',
      desc_en: "Second region"
    , 
      mask: "61-3 #### ####",
      region_name: 'Três',
      desc_en: "Third region"
    , 
      mask: "61-6 #### ####",
      region_name: 'Seis',
      desc_en: "6th region"
    ],
    onKeyValidation: function() 
      let mt = $(this).inputmask("getmetadata");
      $('#jqma span').text(
       mt['region_name']+' - '+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;transition: color 1s
<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 id="jqma"><label>Extended phone alias: <input placeholder="61-# #### ####"/></label> <span/>
</p>

这个动态验证器示例是based in this answer。解释如下:

电话分机类似于Abstract Factory,通过alias: "abstractphone" 引用; phone.js“实现”别名phone,它具有预定义的规则,例如仅数字/整数掩码(如果世界上大多数电话号码对该输入有效,这足以验证它们:$('#mask_aus_phone').inputmask('phone')) ; 通过使用别名属性abstractphone 扩展别名,可以定义多个包含特定掩码和相关元数据的项,这些元数据可以在验证时动态获取。

【讨论】:

这里面,当我们按2,3,6以外的时候,默认是2,可以限制吗?

以上是关于仅在输入掩码 jquery 中从某个号码开始验证电话号码的主要内容,如果未能解决你的问题,请参考以下文章

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

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

想要使用 jquery 输入掩码插件在按钮单击 ipaddress 字段时验证用户

jQuery 验证澳大利亚电话号码

Jquery号码验证+印度

jquery 验证正则表达式方法与 focusout 上的 jquery 掩码冲突