Je cherche à reformater (remplacer, ne pas valider - il existe de nombreuses références pour valider) un numéro de téléphone pour l'affichage en Javascript. Voici un exemple de certaines des données:
Existe-t-il un moyen simple d'utiliser une expression régulière pour le faire? Je cherche le meilleur moyen de le faire. Y a-t-il un meilleur moyen?
Je souhaite reformater le nombre au suivant: (123) 456-7890
En supposant que vous souhaitiez le format "(123) 456-7890
":
function formatPhoneNumber(phoneNumberString) {
var cleaned = ('' + phoneNumberString).replace(/\D/g, '')
var match = cleaned.match(/^(\d{3})(\d{3})(\d{4})$/)
if (match) {
return '(' + match[1] + ') ' + match[2] + '-' + match[3]
}
return null
}
Voici une version qui autorise le code international optionnel +1
:
function formatPhoneNumber(phoneNumberString) {
var cleaned = ('' + phoneNumberString).replace(/\D/g, '')
var match = cleaned.match(/^(1|)?(\d{3})(\d{3})(\d{4})$/)
if (match) {
var intlCode = (match[1] ? '+1 ' : '')
return [intlCode, '(', match[2], ') ', match[3], '-', match[4]].join('')
}
return null
}
formatPhoneNumber('+12345678900') // => "+1 (234) 567-8900"
formatPhoneNumber('2345678900') // => "(234) 567-8900"
Solution possible:
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');
Exemple de travail ici .
J'utilise cette fonction pour formater des nombres américains.
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;
}
}
Il accepte presque toutes les manières imaginables d'écrire un numéro de téléphone américain. Le résultat est formaté sous une forme standard de (987) 654-3210 x123
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
Cette réponse emprunte à la réponse de maerics. Elle diffère principalement par le fait qu’elle accepte les numéros de téléphone saisis partiellement et formate les parties saisies.
phone = value.replace(/\D/g, '');
const match = phone.match(/^(\d{1,3})(\d{0,3})(\d{0,4})$/);
if (match) {
phone = `${match[1]}${match[2] ? ' ' : ''}${match[2]}${match[3] ? '-' : ''}${match[3]}`;
}
return phone
Vous pouvez utiliser ces fonctions pour vérifier les numéros de téléphone valides et les normaliser:
let formatPhone = (dirtyNumber) => {
return dirtyNumber.replace(/\D+/g, '').replace(/(\d{3})(\d{3})(\d{4})/, '($1) $2-$3');
}
let isPhone = (phone) => {
//normalize string and remove all unnecessary characters
phone = phone.replace(/\D+/g, '');
return phone.length == 10? true : false;
}
En voici un qui acceptera les numéros de téléphone et les numéros de téléphone avec extensions.
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
Pour les numéros de téléphone américains
/^\(?(\d{3})\)?[- ]?(\d{3})[- ]?(\d{4})$/
Divisons cette expression régulière en fragments plus petits pour faciliter la compréhension.
/^\(?
: signifie que le numéro de téléphone peut commencer par un (
optionnel.(\d{3})
: après le (
facultatif, il doit y avoir 3 chiffres numériques. Si le numéro de téléphone n'a pas de (
, il doit commencer par 3 chiffres. Par exemple. (308
ou 308
.\)?
: signifie que le numéro de téléphone peut avoir un )
optionnel après les 3 premiers chiffres.[- ]?
: Le numéro de téléphone peut ensuite comporter un trait d'union (-
) après le )
s'il est présent ou après les 3 premiers chiffres.(\d{3})
: Il doit alors y avoir 3 chiffres numériques supplémentaires. E.g (308)-135
ou 308-135
ou 308135
[- ]?
: après le deuxième ensemble de 3 chiffres, le numéro de téléphone peut avoir un autre trait d'union facultatif (-
). E.g (308)-135-
ou 308-135-
ou 308135-
(\d{4})$/
: Enfin, le numéro de téléphone doit se terminer par quatre chiffres. E.g (308)-135-7895
ou 308-135-7895
ou 308135-7895
ou 3081357895
.
Référence :