Маска JavaScript для номера телефона в Бразилии

В настоящее время я использую 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?

Изменить: я создал полный тест, используя решения Гарри и Дмитрия: http://jsfiddle.net/NSd6g/ $('#full').inputmask('(99)9999[9]-9999');

Я подожду еще немного, чтобы увидеть, смогу ли я найти еще лучшее решение. Идеальный не требует красного сообщения, вторая группа по умолчанию будет иметь 4 цифры. И, если третья группа получит пятую цифру, то только тогда вторая группа получит свой пятый пробел, переместив первую цифру третьей группы в пятую цифру второй группы. лол трудно понять, извините!


person Hikari    schedule 13.02.2013    source источник


Ответы (4)


Вы можете добиться этого, используя jquery.inputmask так же просто, как:

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

Попробуйте эту демонстрацию.

Чтобы пропустить необязательную часть при вводе ввода, вам нужно ввести пробел или символ после необязательной части в маске (в данном случае дефис).

person lazyhammer    schedule 18.02.2013
comment
Твоя маска мне не подходит. Я не могу пропустить пятый, когда я набираю первое число третьей группы, оно переходит на пятое число второй группы. Если бы первое число второй группы могло быть числом или пробелом, это могло бы работать. - person Hikari; 20.02.2013
comment
Это сработало, лол! Мне нужно добавить примечание, объясняющее ввод пробела, если нужно использовать 4 числа: P - person Hikari; 20.02.2013
comment
Извините, забыл упомянуть об этом :) - person lazyhammer; 20.02.2013

С маской 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, чтобы вводы выглядели более похожими на один.

person harryg    schedule 18.02.2013
comment
Хорошая идея, я провел с ней несколько тестов: jsfiddle.net/6NXWW Но мне очень хотелось, чтобы маска сохраняла все вместе - person Hikari; 20.02.2013

Мое предложение: "(99) [9] 9999-9999"

person Fábio    schedule 03.06.2016
comment
по крайней мере, для меня это более естественно, если вы хотите ввести число из 8 цифр, просто нажмите пробел в первом числе и все... эстетически тоже лучше... (11) 9 1234-5678 или ( 11) 1234-5678 по крайней мере у меня... - person Fábio; 04.06.2016

Я тоже бразилец.

На моей работе мы фактически не используем символ "-" в середине для масок такого типа, так что путаницы нет... окончательная маска будет следующей: (99)99999999?9

Конечному пользователю немного сложнее определить таким образом неправильно набранный номер телефона, но это работает.

Еще один известный мне способ — создать регулярное выражение в JS, а затем использовать его с другим плагином, например, jQuery. Подтвердить.

person gustavohenke    schedule 18.02.2013
comment
лол, да, это можно было бы сделать, но 8 или 9 цифр вместе трудно прочитать и легко ошибиться. Не могли бы вы предоставить регулярное выражение, которое будет работать с проверкой? - person Hikari; 20.02.2013