Как получить регулярное выражение, которое принимает числа от пользователя

71
6

Я пытаюсь написать регулярное выражение для номеров телефонов США, где пользователь может ввести номер, и тире появляется автоматически. Но здесь недостаток заключается в том, что пользователь вводит "123", а затем "-" разрывает регулярное выражение, а вместо 123-456-7890 становится 123-4567890. Вот код регулярного выражения:

  $('#AccountFrm_telephone').attr('maxlength', '12');

$('#AccountFrm_telephone').keyup(function(){
$(this).val($(this).val().replace(/^(\d{3})(\d{3})(\d)+$/, "$1-$2-$3"));
});

Может быть, есть что-то, что мы добавляем в regex, чтобы пользователь не мог набирать тире?

спросил(а) 2017-02-23T20:02:00+03:00 3 года, 9 месяцев назад
1
Решение
58

для завершений: у вас есть 2 вопроса первой этой части (\d)+ должно быть (\d+) или вы не будете правильно (\d+) последнюю группу по номерам. вторая часть заключается в том, что вы не обрабатываете возможные тире во входе, поэтому попробуйте что-то вроде:

.replace(/^(\d{3})-?(\d{3})-?(\d+)$/, "$1-$2-$3")

вопросительные знаки (?) обозначают 0 или 1 раз, то есть пользователь может вводить тире, если он хочет

ответил(а) 2017-02-23T20:18:00+03:00 3 года, 9 месяцев назад
59

Попробуй это:


$("#input1").on('keyup', e => {
e.target.value = e.target.value.replace(/(\d{3})-?(\d{3})-?(\d+)/, '$1-$2-$3')
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="input1">

ответил(а) 2017-02-23T20:18:00+03:00 3 года, 9 месяцев назад
58

Возможно, попробуйте следующее:

$('#AccountFrm_telephone').attr('maxlength', '12');

$('#AccountFrm_telephone').keyup(function(){
$(this).val($(this).val().replace(/(\d{3})(\d{3})(\d{4})/, "$1-$2-$3"));
});

ответил(а) 2017-02-23T20:16:00+03:00 3 года, 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема