2014-10-16 5 views
1

У меня есть Rails приложение, которое я запись в text_field как string, который является телефонный номер, который я хотел бы автоматически отформатирован в следующей маске xxx-xxx-xxxxJQuery или Javascript для Автоформата телефона маска

Я искал Переполнение стека и нашло это auto-format-phone-number-in-jquery но OP смотрел форматировать маску xxx-xxx-xxx и мне нужно, чтобы выяснить, как сделать маску xxx-xxx-xxxx

Я позаимствовал отрезал от этого ответа, и это делает работу, но снова форматов as xxx-xxx-xxxx

$(function(){ 
    $('#call_caller_phone').keyup(function() 
    { 
    this.value = this.value.replace(/(\d{3})\-?/g,'$1-'); 
    }); 
}); 

Может ли кто-нибудь помочь мне с форматированием в маске xxx-xxx-xxxx?

+0

Поскольку вы используете JQuery, почему бы не пойти с HTTP : //plugins.jquery.com/mask/ – LcSalazar

ответ

2

Я написал пользовательский JQuery код, пожалуйста, проверьте ниже фрагмент кода

$("#yourphone").keypress(function (e) { 
     if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) { 
      return false; 
     } 
     var curchr = this.value.length; 
     var curval = $(this).val(); 
     if (curchr == 3) { 
      $(this).val(curval + "-"); 
     } else if (curchr == 7) { 
      $(this).val(curval + "-"); 
     } 
     $(this).attr('maxlength', '12'); 
    }); 

Рабочая скрипку Пример https://jsfiddle.net/o2gxgz9r/11639/

+0

Это намного проще и лучше подходит для использования. Спасибо за вклад! – nulltek

+0

@nulltek приветствуется счастливое кодирование :) (y) .... –

1
function phoneMask() { 
    num = $(this).val().replace(/\D/g,''); 
    $(this).val(num.substring(0,3) + '-' + num.substring(3,6) + '-' + num.substring(6,10)); 
} 
$('[type="tel"]').keyup(phonemask) 

Как это работает: взять номер телефона, избавиться от любых нечисловых символов. Затем возьмите первые 3 числа, добавьте тире, возьмите следующие три, добавьте тире и возьмите следующие четыре.

Я изменил селектор на [type="tel"], потому что вы должны установить тип ввода tel для телефонных номеров, а затем эта функция применит его ко всем входам телефонного номера. Но если это вам не подходит, замените его на #call_caller_phone

+0

Отличное решение, которое не требует плагина. Простой и элегантный. В моем случае я сделал небольшую модификацию, потому что мои элементы были добавлены динамически: $ (document) .on ('keyup', '[type = tel], phoneMask); – santa

4

Я считаю, что это может сработать.

$(function(){ 
 
    $('#call_caller_phone').keyup(function() 
 
    { 
 
    this.value = this.value.replace(/(\d{3})\-?(\d{3})\-?(\d{4})/,'$1-$2-$3'); 
 
    //alert ("OK"); 
 
    }); 
 
});
#call_caller_phone { 
 
    color: #fff; 
 
    background-color: #ccc; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<input id="call_caller_phone" type="text">

+0

Зачем это работать? Твоей веры недостаточно, чтобы убедить меня. Объяснить, почему! –

+1

_Why? _ Этот ** (\ d {3}) \ -? ** принимает три цифры, а затем необязательную тире и сохраняет их в ** $ 1 **. Следующий ** (\ d {3}) \ -? ** принимает следующие три цифры, а затем необязательную тире и сохраняет их в ** $ 2 **. Финал ** (\ d {4}) ** берет следующие четыре цифры и сохраняет его в $ 3. Эта часть ** '$ 1- $ 2- $ 3' ** берет $ 1, $ 2 и $ 3 и ставит тире между ними. Нажмите кнопку ** Выполнить фрагмент кода ** и проверьте его. Кроме того, была бы очень благодарна _please_. -K –

+0

Вы должны добавить это объяснение к своему ответу, с меньшим количеством snark. Вы должны начать читать такие вещи, как плакат имеет положительное отношение, иначе вы обречены на обидную жизнь в Интернете;) Это интернет. Я не должен сказать, пожалуйста, чтобы быть хорошим. –

1

Это позволит только числовой ввод в текстовое поле (и «-'s) и только позволяют 10 цифр (плюс 2» -'s) для телефонных номеров в стиле США , Он также вставляет тире, как и пользователь. Возможно, стоит посмотреть на то, чтобы сделать все это в конце. Но есть хорошие библиотеки jquery для обработки входных масок, а также masked input plugin.

$('#phone').keyup(function(ev) { 
 
    var key = ev.which; 
 
    if (key < 48 || key > 57 || key != 45) { 
 
    ev.preventDefault(); 
 
    } 
 

 
    if (this.value.length > 12) { 
 
    this.value = this.value.slice(0, -1); 
 
    return; 
 
    } 
 

 
    this.value = this.value.replace(/^(\d{3})(\d)/, '$1-$2') 
 
    .replace(/^(\d{3}-\d{3})(\d)/, '$1-$2'); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<input type="text" id='phone' />

Смежные вопросы