Javascript RegEx适用于具有特定代码区域的手机

时间:2014-06-04 01:53:52

标签: jquery plugins input mask

我使用jQuery Mask Plugin(http://igorescobar.github.io/jQuery-Mask-Plugin/)来屏蔽带有代码区域的手机的输入。

$('.cellphone').mask('00 000000000');

这接受如下输入:

  

21 972389472

     

99 232441244

     

69 522235352

     

42 022222222

但是现在我必须匹配细节代码区域。例如,仅允许代码区域21和99。因此,相同的输入仅接受:

  

21 972389472

     

99 232441244

我试图创建一个掩码功能,但没有取得多大成功。该插件提供此功能,如:

var celphoneMask = function(phone, e, currentField, options){
  return phone.match(/^(\(?11\)? ?9(5[0-9]|6[0-9]|7[01234569]|8[0-9]|9[0-9])[0-9]{1})/g) ? 
  '(00) 00000-0000' : '(00) 0000-0000';
};

$(".sp_celphones").mask(celphoneMask);

知道我该怎么办? :■

2 个答案:

答案 0 :(得分:0)

以下正则表达式将接受21 .....和99 .....数字。

/^(?:21|99) [0-9]{8}$/

答案 1 :(得分:0)

没有明显的选项可以阻止使用此插件显示多位数模式,因为Regex测试是每个字符""。您仍然只能接受有效的区号,但您必须在插件外工作。

您可以使用translation选项自定义数字模式,从而消除大量无效区号:

"translation": {
    "y": {
        "pattern": /[29]/,
            "optional": false
    },
    "z": {
        "pattern": /[19]/,
            "optional": false
    }
}

然后制作你的面具:

'yz 000000000'

这只接受区号21299199。要阻止2991,您需要捕获keypress事件并测试这两种组合。我希望能够说您可以使用onKeyPress插件选项,但该插件实际上会触发onKeyPress选项onKeyUp,而不是onKeyPress。好消息是您可以将自己的onKeyPress处理程序链接到mask插件:

$(selector).mask().on('keypress', function (e) {
    var validAreaCodes = /^(?:21|99)/, // define area codes
        value = this.value + String.fromCharCode(e.which), // append keypressed to existing value
        matched = validAreaCodes.test(value), // test new value
        failed = value.length > 1 && !matched; // fail if not a match
    if (failed) {
        e.preventDefault(); // prevent keypress if failed
    };
    return !failed;
});

这是一个有效的演示:http://jsfiddle.net/K9YF4/