Подтвердить что ты не робот

Регулярное выражение для переформатирования номера телефона в США в Javascript

Я ищу переформатировать (заменить, а не проверять - есть много ссылок для проверки) номер телефона для отображения в Javascript. Вот пример некоторых данных:

  • 123 4567890
  • (123) 456-7890
  • (123) 456-7890
  • 123 456 7890
  • 123.456.7890
  • (пустой/пустой)
  • 1234567890

Есть ли простой способ использовать регулярное выражение для этого? Я ищу лучший способ сделать это. Есть ли лучший способ?

Я хочу переформатировать число до следующего: (123) 456-7890

4b9b3361

Ответ 1

Предполагая, что вам нужен формат "(123) 456-7890":

function formatPhoneNumber(s) {
  var s2 = (""+s).replace(/\D/g, '');
  var m = s2.match(/^(\d{3})(\d{3})(\d{4})$/);
  return (!m) ? null : "(" + m[1] + ") " + m[2] + "-" + m[3];
}

Ответ 2

Возможное решение:

function normalize(phone) {
    //normalize string and remove all unnecessary characters
    phone = phone.replace(/[^\d]/g, "");

    //check if number length equals to 10
    if (phone.length == 10) {
        //reformat and return phone number
        return phone.replace(/(\d{3})(\d{3})(\d{4})/, "($1) $2-$3");
    }

    return null;
}

var phone = '(123)4567890';
phone = normalize(phone); //(123) 456-7890

Ответ 3

var x = '301.474.4062';

x = x.replace(/\D+/g, '')
     .replace(/(\d{3})(\d{3})(\d{4})/, '($1) $2-$3');

Рабочий пример здесь.

Ответ 4

Я использую эту функцию для форматирования номеров в США.

function formatUsPhone(phone) {

    var phoneTest = new RegExp(/^((\+1)|1)? ?\(?(\d{3})\)?[ .-]?(\d{3})[ .-]?(\d{4})( ?(ext\.? ?|x)(\d*))?$/);

    phone = phone.trim();
    var results = phoneTest.exec(phone);
    if (results !== null && results.length > 8) {

        return "(" + results[3] + ") " + results[4] + "-" + results[5] + (typeof results[8] !== "undefined" ? " x" + results[8] : "");

    }
    else {
         return phone;
    }
}

Он принимает практически все мыслимые способы написания номера телефона в США. Результат форматируется в стандартную форму (987) 654-3210 x123

Ответ 5

Для номеров телефонов США

/^\(?(\d{3})\)?[- ]?(\d{3})[- ]?(\d{4})$/

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

  • /^\(?: означает, что номер телефона может начинаться с необязательного (.
  • (\d{3}): после необязательного ( должно быть 3 числовых цифры. Если номер телефона не имеет (, он должен начинаться с 3 цифр. Например. (308 или 308.
  • \)?: означает, что номер телефона может иметь необязательный ) после первых трех цифр.
  • [- ]?: Затем номер телефона может иметь необязательный дефис (-) после ), если он есть, или после первых трех цифр.
  • (\d{3}): Затем должно быть еще 3 числовых цифры. Например, (308)-135 или 308-135 или 308135
  • [- ]?: после второго набора из 3 цифр номер телефона может иметь другой необязательный дефис (-). Например, (308)-135- или 308-135- или 308135-
  • (\d{4})$/: Наконец, номер телефона должен заканчиваться четырьмя цифрами. Например, (308)-135-7895 или 308-135-7895 или 308135-7895 или 3081357895.

    Ссылка:

http://www.zparacha.com/phone_number_regex/

Ответ 6

Вот тот, который будет принимать как номера телефонов, так и номера телефонов с расширениями.

function phoneNumber(tel) {
var toString = String(tel),
    phoneNumber = toString.replace(/[^0-9]/g, ""),
    countArrayStr = phoneNumber.split(""),
    numberVar = countArrayStr.length,
    closeStr = countArrayStr.join("");
if (numberVar == 10) {
    var phone = closeStr.replace(/(\d{3})(\d{3})(\d{4})/, "$1.$2.$3"); // Change number symbols here for numbers 10 digits in length. Just change the periods to what ever is needed.
} else if (numberVar > 10) {
    var howMany = closeStr.length,
        subtract = (10 - howMany),
        phoneBeginning = closeStr.slice(0, subtract),
        phoneExtention = closeStr.slice(subtract),
        disX = "x", // Change the extension symbol here
        phoneBeginningReplace = phoneBeginning.replace(/(\d{3})(\d{3})(\d{4})/, "$1.$2.$3"), // Change number symbols here for numbers greater than 10 digits in length. Just change the periods and to what ever is needed. 
        array = [phoneBeginningReplace, disX, phoneExtention],
        afterarray = array.splice(1, 0, " "),
        phone = array.join("");

} else {
    var phone = "invalid number US number";
}
return phone;
}

phoneNumber("1234567891"); // Your phone number here

Ответ 7

var numbers = "(123) 456-7890".replace(/[^\d]/g, ""); //This strips all characters that aren't digits
if (numbers.length != 10) //wrong format
    //handle error
var phone = "(" + numbers.substr(0, 3) + ") " + numbers.substr(3, 3) + "-" + numbers.substr(6); //Create format with substrings