2013-02-13 132 views
1

目前我正在使用jquery.maskedinput作为精确的掩码格式,但它不适用于电话号码。巴西的JavaScript掩码电话号码

在巴西,我们曾经有格式为(99)9999-9999的所有数字。但最近在一些城市,手机使用(99)99999-9999,而他们的普通电话和国内其他地区仍然使用(99)9999-9999。

jquery.maskedinput似乎不支持2个格式在相同的输入,其中字符串中间的字符可能或可能不存在。正如我在文档中可以看到的,我可以有(99)9999-9999和(99)9999-99999,但这会混淆用户。

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

编辑:我创建使用哈利和德米特里·解决方案的全面测试:http://jsfiddle.net/NSd6g/$('#full').inputmask('(99)9999[9]-9999');

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

回答

5

你可以做到这一点使用jquery.inputmask简单:

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

试试这个demo

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

+0

你的面具不适合我。当我输入第三组的第一个数字时,我不能得到第五个组的第五个组。如果第二组的第一个数字可以是“数字或空间”,它可以工作。 – Hikari 2013-02-20 03:23:26

+0

它工作大声笑!如果要使用4个数字,我需要添加一个注释来解释类型空间:P – Hikari 2013-02-20 03:25:08

+0

对不起,忘了提及这个:) – lazyhammer 2013-02-20 08:51:01

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使输入看起来更像一个。

+0

好主意,我做了一些测试它:http://jsfiddle.net/6NXWW/但是我真的想要一个面具把它们放在一起 – Hikari 2013-02-20 03:26:38

1

我也是巴西人。

在我的工作,我们实际上并不使用“ - ”字符,中间为这些类型的口罩,所以没有混乱......最终口罩是以下几点:(99)99999999?9

这是一个有点难以让最终用户通过这种方式识别错误键入的电话号码,但它很有效。

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

+0

哈哈是的,这是可以做到的,但8或9位数字在一起很难阅读,而且很容易错误输入。你能提供一个可用于验证的正则表达式吗? – Hikari 2013-02-20 02:39:46

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'); 
0

我的建议是: “(99)[9] 9999-9999”

+2

你能解释为什么你认为这是一个好的解决方案吗? – Laurel 2016-06-03 19:29:21

+0

至少对我来说是更自然的,如果你想输入一个8位数字的数字,只需在第一个数字中输入一个空格就可以了... 美学效果更好...(11)9 1234-5678或(11)1234-5678 至少对我而言... – 2016-06-04 02:16:46