JQuery zip masking для нескольких форматов

У меня есть требования к маскировке поля zip, чтобы он позволял классифицировать 5-значный формат zip (XXXXX) или 5 + 4 (XXXXX-XXXX).

Я мог бы что-то вроде:

$('#myZipField').mask("?99999-9999");

но усложнение исходит из того, что черта не должна отображаться, если пользователь вводит только 5 цифр.

Это лучшее, что я придумал до сих пор - я мог бы расширить его, чтобы автоматически вставить тире, когда они вставляют 6-ю цифру, но проблема с этим была бы забавным поведением при удалении (я мог бы остановить их от удаления тире но он будет исправлять патч и т.д., это становится кошмаром):

$.mask.definitions['~']='[-]';
$("#myZipField").mask("?99999~9999", {placeholder:""});

Есть ли какой-либо из ящиков способ сделать это или мне нужно катиться самостоятельно?

Ответ 1

Вам не нужно использовать другой плагин. Просто переместите знак вопроса, чтобы вместо:

$('#myZipField').mask("?99999-9999");

вы должны использовать:

$('#myZipField').mask("99999?-9999");

В конце концов, это не вся строка, которая является необязательной, просто - и далее.

Ответ 2

Если вы уже используете jQuery, возможно, есть сотни плагинов для масок и т.д., например: http://www.meiocodigo.com/projects/meiomask/

Итак, я не думаю, что вам придется катить свой собственный

Ответ 3

Этот почтовый индекс на самом деле прост, но когда у вас более сложный формат для обработки, вот как он решается с помощью плагина (из демонстрационная страница):

var options =  {onKeyPress: function(cep, e, field, options){
  var masks = ['00000-000', '0-00-00-00'];
    mask = (cep.length>7) ? masks[1] : masks[0];
  $('.crazy_cep').mask(mask, options);
}};

$('.crazy_cep').mask('00000-000', options);

Ответ 4

Почему поле не должно быть прозрачным и иметь за ним текстовый объект с формой в светло-сером? Поэтому они видят ####### - #### в фоновом режиме, а затем устанавливают его так, чтобы буквы исчезали по мере их ввода. В этот момент, это предполагает, что они должны ввести тире, если они хотят поставить дополнительные четыре, не так ли? Затем вы можете просто установить script, чтобы автоматически вставить дефис, если они испортили и набрали 6 номеров?