巴西电话号码的JavaScript掩码

时间:2013-02-13 12:20:32

标签: javascript jquery validation maskedinput

目前我正在使用jquery.maskedinput进行严格的掩码格式,但它不适用于电话号码。

在巴西,我们过去的所有数字都是格式(99)9999-9999。但最近,在一些城市,手机正在使用(99)99999-9999,而普通手机和其他国家仍在使用(99)9999-9999。

jquery.maskedinput似乎不支持同一输入上的2种格式,其中字符串中间的字符可能存在也可能不存在。正如我在其文档中看到的那样,我可能有(99)9999-9999和(99)9999-99999,但这会让用户感到困惑。

是否有其他掩码插件/框架允许我验证(99)9999-9999和(99)99999-9999?

编辑:我使用harry和Dmitrii解决方案创建了一个完整的测试:http://jsfiddle.net/NSd6g/ $('#full').inputmask('(99)9999[9]-9999');

我会再等一下,看看能不能找到更好的解决方案。完美的一个不需要红色消息,第二个组默认有4个数字。而且,如果第三组获得第五位数,那么第二组将获得第五位数,将第三组的第一位数移至第二组第五位。大声笑有点难以理解,对不起!

5 个答案:

答案 0 :(得分:5)

您可以使用jquery.inputmask完成此操作,只需:

jQuery(function($) {
    $('#test').inputmask('(99)9999[9]-9999');
});

试试这个demo

要在键入输入时跳过可选部分,您需要键入空格或掩码中可选部分后面的字符(在本例中为连字符)。

答案 1 :(得分:1)

使用jQuery掩码,您只能将尾随字符设置为可选。不是输入中间的那些。

我的建议是有3个输入框,每个输入框一个,中间输入末尾有可选字符。然后在提交时连接输入。

像这样:

 (<input id="phone2" />)<input id="phone3" />-<input id="phone4" />

jQuery(function($){
  $("#phone2").mask("99");
  $("#phone3").mask("9999?9");
  $("#phone4").mask("9999");
});

请参阅小提琴:http://jsfiddle.net/Rge83/1/

为了使用户更友好,可以添加一个脚本,以便在填充当前输入后移动到下一个输入+一些css,使输入看起来更像是一个。

答案 2 :(得分:1)

我也是巴西人。

在我的工作中,我们实际上并没有在中间使用“ - ”字符来表示这些类型的面具,所以没有混淆......最后的面具将是以下内容:(99)99999999?9

最终用户通过这种方式识别错误输入的电话号码有点困难,但它确实有用。

我知道的另一种方法是在JS中构建正则表达式,然后将其与另一个插件一起使用,例如jQuery Validate

答案 3 :(得分:1)

我的建议:&#34;(99)[9] 9999-9999&#34;

答案 4 :(得分:0)

//Configuração para celular com nono digito
$('#Seletor').focusout(function () {
    var phone, element;
    element = $(this);
    element.unmask();
    phone = element.val().replace(/\D/g, '');
    if (phone.length > 10) {
        element.mask("(99) 99999-999?9");
    } else {
        element.mask("(99) 9999-9999?9");
    }
}).trigger('focusout');