Как отформатировать номер телефона с помощью jQuery

93

Я сейчас показываю номера телефонов вроде 2124771000. Тем не менее, мне нужно число , чтобы быть отформатирован в более удобочитаемой форме, например: 212-477-1000. Вот мой ток HTML:

<p class="phone">2124771000</p>
Xtian
источник
1
Слишком поздно ответ, но только для помощи тем , кто посадки на этой странице URL: igorescobar.github.io/jQuery-Mask-Plugin
Senthil
5
Не уверен, что я понимаю закрытый статус этого. "Not Constructive" не кажется правильным ... Я считаю эту информацию чрезвычайно полезной и напрямую связанной с проблемой, которая привела меня сюда. Я не оспариваю тот факт, что он закрыт, но указанная причина закрытия
Бретт Вебер
Возможно, вопрос был отредактирован и раньше был менее информативным ... он кажется мне совершенно правильным вопросом и ответом SO и множеством положительных отзывов.
Кевин Нельсон
1
Библиотека Googles github.com/googlei18n/libphonenumber jQuery не требуется.
nu everest

Ответы:

217

Просто: http://jsfiddle.net/Xxk3F/3/

$('.phone').text(function(i, text) {
    return text.replace(/(\d{3})(\d{3})(\d{4})/, '$1-$2-$3');
});

Или: http://jsfiddle.net/Xxk3F/1/

$('.phone').text(function(i, text) {
    return text.replace(/(\d\d\d)(\d\d\d)(\d\d\d\d)/, '$1-$2-$3');
});

Примечание. Метод .text () нельзя использовать для элементов ввода. Для текста поля ввода используйте метод .val ().

andlrc
источник
4
Я изменил это, чтобы поддерживать события «изменения» в полях ввода. jsfiddle.net/gUsUK
Зак Шеллбеттер
3
Немного более надежное регулярное выражение (хотя для него требуется настраиваемая функция замены) было бы /(\d{3})?(\d{3})(\d{4})$/в случае отсутствия кода города
RevanProdigalKnight,
Действует ли это для телефонных номеров по всему миру?
RamPrasadBismil
Если у вас есть несколько телефонных номеров на странице, рассмотрите возможность использования функции $ (selector) .each (), чтобы легко применить эту маску ко всем номерам.
Daniel Siebert
Я хочу реализовать это с помощью события нажатия клавиш и размытия. Телефонный номер не форматируется, если цифры меньше 10. Пример кода: $('#x_phone').on('keypress blur',function() { var ph = $(this).val(); var temp = ph.replace(/(\d{3})(\d{3})(\d{4})/, '$1-$2-$3'); $(this).val(temp); //alert(temp); });
Мусаддик Хан
54
var phone = '2124771000',
    formatted = phone.substr(0, 3) + '-' + phone.substr(3, 3) + '-' + phone.substr(6,4)
Марк Б
источник
7
@AndreasAL: потому что движок регулярных выражений имеет большие накладные расходы, особенно для того, где формат ввода известен, а простые строковые операции намного эффективнее. И, конечно же, есть правило, согласно которому использование регулярного выражения для решения проблемы просто создает две проблемы.
Marc B
4
Это решение также правильно форматирует телефонные номера, содержащие буквы, например «212555IDEA».
Джейсон Уайтхорн
1
это хорошо работает в среде Windows, но не работает на устройстве iOS. есть ли альтернатива, которая работает на обеих платформах
Пурушотам Шарма
12

Не забудьте убедиться, что вы работаете исключительно с целыми числами.

var separator = '-';
$( ".phone" ).text( function( i, DATA ) {
    DATA
        .replace( /[^\d]/g, '' )
        .replace( /(\d{3})(\d{3})(\d{4})/, '$1' + separator + '$2' + separator + '$3' );
    return DATA;
});
Трентон Бост
источник
8

Вот комбинация некоторых из этих ответов. Это можно использовать для полей ввода. Работает с телефонными номерами, состоящими из 7 и 10 цифр.

// Used to format phone number
function phoneFormatter() {
  $('.phone').on('input', function() {
    var number = $(this).val().replace(/[^\d]/g, '')
    if (number.length == 7) {
      number = number.replace(/(\d{3})(\d{4})/, "$1-$2");
    } else if (number.length == 10) {
      number = number.replace(/(\d{3})(\d{3})(\d{4})/, "($1) $2-$3");
    }
    $(this).val(number)
  });
}

Живой пример: JSFiddle

Я знаю, что это не дает прямого ответа на вопрос, но когда я искал ответы, это была одна из первых страниц, которые я нашел. Итак, этот ответ для всех, кто ищет что-то похожее на то, что искал я.

Круз Нуньес
источник
5

Используйте библиотеку для обработки номера телефона. Libphonenumber от Google - ваш лучший выбор .

// Require `PhoneNumberFormat`.
var PNF = require('google-libphonenumber').PhoneNumberFormat;

// Get an instance of `PhoneNumberUtil`.
var phoneUtil = require('google-libphonenumber').PhoneNumberUtil.getInstance();

// Parse number with country code.
var phoneNumber = phoneUtil.parse('202-456-1414', 'US');

// Print number in the international format.
console.log(phoneUtil.format(phoneNumber, PNF.INTERNATIONAL));
// => +1 202-456-1414

Я рекомендую использовать этот пакет от seegno.

aloisdg переходит на codidact.com
источник
4

Я предоставил вам ссылку jsfiddle, чтобы отформатировать номера телефонов в США как (XXX) XXX-XXX

 $('.class-name').on('keypress', function(e) {
  var key = e.charCode || e.keyCode || 0;
  var phone = $(this);
  if (phone.val().length === 0) {
    phone.val(phone.val() + '(');
  }
  // Auto-format- do not expose the mask as the user begins to type
  if (key !== 8 && key !== 9) {
    if (phone.val().length === 4) {
      phone.val(phone.val() + ')');
    }
    if (phone.val().length === 5) {
      phone.val(phone.val() + ' ');
    }
    if (phone.val().length === 9) {
      phone.val(phone.val() + '-');
    }
    if (phone.val().length >= 14) {
      phone.val(phone.val().slice(0, 13));
    }
  }

  // Allow numeric (and tab, backspace, delete) keys only
  return (key == 8 ||
    key == 9 ||
    key == 46 ||
    (key >= 48 && key <= 57) ||
    (key >= 96 && key <= 105));
})

.on('focus', function() {
  phone = $(this);

  if (phone.val().length === 0) {
    phone.val('(');
  } else {
    var val = phone.val();
    phone.val('').val(val); // Ensure cursor remains at the end
  }
})

.on('blur', function() {
  $phone = $(this);

  if ($phone.val() === '(') {
    $phone.val('');
  }
});

Живой пример: JSFiddle

Kapilrc
источник
Как я могу изменить этот шаблон, чтобы номер отображался слева направо, например ==> (021) 88888888
Мостафа
3

попробуйте что-нибудь вроде этого ..

jQuery.validator.addMethod("phoneValidate", function(number, element) {
    number = number.replace(/\s+/g, ""); 
    return this.optional(element) || number.length > 9 &&
        number.match(/^(1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/);
}, "Please specify a valid phone number");

$("#myform").validate({
  rules: {
    field: {
      required: true,
      phoneValidate: true
    }
  }
});
Анудж Патель
источник
2

Рассмотрим libphonenumber-js ( https://github.com/halt-hammerzeit/libphonenumber-js ), который является уменьшенной версией полного и известного libphonenumber.

Быстрый и грязный пример:

$(".phone-format").keyup(function() {
// Don't reformat backspace/delete so correcting mistakes is easier
if (event.keyCode != 46 && event.keyCode != 8) {
    var val_old = $(this).val();
    var newString = new libphonenumber.asYouType('US').input(val_old);
    $(this).focus().val('').val(newString);
}
});

(Если вы все же используете регулярное выражение, чтобы избежать загрузки библиотеки, избегайте переформатирования backspace / delete, чтобы упростить исправление опечаток.)

Адам Лейн
источник
2

Альтернативное решение:

function numberWithSpaces(value, pattern) {
  var i = 0,
    phone = value.toString();
  return pattern.replace(/#/g, _ => phone[i++]);
}

console.log(numberWithSpaces('2124771000', '###-###-####'));

Пенни Лю
источник
1

Я нашел этот вопрос, когда искал в Google способ автоматического форматирования телефонных номеров через плагин jQuery. Принятый ответ не был идеальным для моих нужд, и за 6 лет, прошедших с момента его публикации, многое произошло. В конце концов я нашел решение и документирую его здесь для потомков.

Проблема

Я хочу, чтобы в поле ввода html моего телефонного номера автоматически форматировалось (маскировалось) значение по мере ввода пользователем.

Решение

Проверьте Cleave.js . Это очень мощный / гибкий и простой способ решить эту проблему и многие другие проблемы с маскированием данных.

Форматировать номер телефона так же просто, как:

var cleave = new Cleave('.input-element', {
    phone: true,
    phoneRegionCode: 'US'
});
Тод Бердсолл
источник
1

Вход:

4546644645

Код:

PhoneNumber = Input.replace(/(\d\d\d)(\d\d\d)(\d\d\d\d)/, "($1)$2-$3");

Вывод:

(454)664-4645
Sushant
источник
0
 $(".phoneString").text(function(i, text) {
            text = text.replace(/(\d{3})(\d{3})(\d{4})/, "($1) $2-$3");
            return text;
        });

Выход :-( 123) 657-8963

нирали
источник
-1

Чтобы расширить код Круза Нуньеса и добавить непрерывное форматирование, а также включить некоторые международные форматы телефонных номеров.

    $('#phone').on('input', function() {
      var number = $(this).val().replace(/[^\d]/g, '');
      if (number.length == 3) {
        number = number.replace(/(\d{3})/, "$1-");
      } else if (number.length == 4) {
        number = number.replace(/(\d{3})(\d{1})/, "$1-$2");
      } else if (number.length == 5) {
        number = number.replace(/(\d{3})(\d{2})/, "$1-$2");
      } else if (number.length == 6) {
        number = number.replace(/(\d{3})(\d{3})/, "$1-$2-");
      } else if (number.length == 7) {
        number = number.replace(/(\d{3})(\d{3})(\d{1})/, "$1-$2-$3");
      } else if (number.length == 8) {
        number = number.replace(/(\d{4})(\d{4})/, "$1-$2");
      } else if (number.length == 9) {
        number = number.replace(/(\d{3})(\d{3})(\d{3})/, "$1-$2-$3");
      } else if (number.length == 10) {
        number = number.replace(/(\d{3})(\d{3})(\d{4})/, "$1-$2-$3");
      } else if (number.length == 11) {
        number = number.replace(/(\d{1})(\d{3})(\d{3})(\d{4})/, "$1-$2-$3-$4");
      } else if (number.length == 12) {
        number = number.replace(/(\d{2})(\d{3})(\d{3})(\d{4})/, "$1-$2-$3-$4");
      }
      $(this).val(number);
    });
Валик Радд
источник
-2

может быть это поможет

var countryCode = +91;
var phone=1234567890;
phone=phone.split('').reverse().join('');//0987654321
var formatPhone=phone.substring(0,4)+'-';//0987-
phone=phone.replace(phone.substring(0,4),'');//654321
while(phone.length>0){
formatPhone=formatPhone+phone.substring(0,3)+'-';
phone=phone.replace(phone.substring(0,3),'');
}
formatPhone=countryCode+formatPhone.split('').reverse().join('');

вы получите + 91-123-456-7890

user6560624
источник