Ответ 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];
}
Я ищу переформатировать (заменить, а не проверять - есть много ссылок для проверки) номер телефона для отображения в Javascript. Вот пример некоторых данных:
Есть ли простой способ использовать регулярное выражение для этого? Я ищу лучший способ сделать это. Есть ли лучший способ?
Я хочу переформатировать число до следующего: (123) 456-7890
Предполагая, что вам нужен формат "(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];
}
Возможное решение:
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
var x = '301.474.4062';
x = x.replace(/\D+/g, '')
.replace(/(\d{3})(\d{3})(\d{4})/, '($1) $2-$3');
Рабочий пример здесь.
Я использую эту функцию для форматирования номеров в США.
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
Для номеров телефонов США
/^\(?(\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
.
Ссылка:
Вот тот, который будет принимать как номера телефонов, так и номера телефонов с расширениями.
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
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