151 votes

Expression régulière pour reformater un numéro de téléphone américain en Javascript

Je cherche à reformater (remplacer, pas valider - il y a de nombreuses références pour la validation) un numéro de téléphone pour l'afficher en Javascript. Voici un exemple de données :

  • 123 4567890
  • (123) 456-7890
  • (123)456-7890
  • 123 456 7890
  • 123.456.7890
  • (vide/nul)
  • 1234567890

Existe-t-il un moyen simple d'utiliser une expression régulière pour ce faire ? Je cherche la meilleure façon de le faire. Existe-t-il une meilleure méthode ?

Je souhaite reformater le numéro comme suit : (123) 456-7890

1voto

Alex Turpin Points 17272
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

1voto

jjones Points 11

En voici un qui accepte les numéros de téléphone et les numéros de téléphone avec extension.

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

1voto

simarjit singh Points 11

Pour tous les numéros de téléphone internationaux avec un indicatif de pays jusqu'à 3 chiffres, nous pouvons modifier légèrement la réponse originale comme suit. Pour la première correspondance, au lieu de chercher '1', nous devrions chercher 1 à 3 chiffres.

 export const formatPhoneNumber = (phoneNumberString) => {
  var cleaned = ('' + phoneNumberString).replace(/\D/g, '');
  var match = cleaned.match(/^(\d{1,3}|)?(\d{3})(\d{3})(\d{4})$/);
   if (match) {
    var intlCode = (match[1] ? `+${match[1]} ` : '');
    return [intlCode, '(', match[2], ') ', match[3], '-', match[4]].join('');
  }
  return null;
}
console.log( formatPhoneNumber('16464765278') )//+1 (646) 476-5278
console.log( formatPhoneNumber('+2549114765278')) //+254 (911) 476-5278
console.log( formatPhoneNumber('929876543210') )//+92 (987) 654-3210

Répond à mes attentes.

0voto

Bebu Points 55

Pour les numéros de téléphone aux États-Unis

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

Divisons cette expression régulière en fragments plus petits pour la rendre plus facile à comprendre.

  • /^\(? : Signifie que le numéro de téléphone peut commencer par une mention facultative ( .
  • (\d{3}) : Après l'option ( il doit y avoir 3 chiffres. Si le numéro de téléphone n'a pas de ( il doit commencer par 3 chiffres. Par exemple (308 o 308 .
  • \)? : Signifie que le numéro de téléphone peut comporter un élément optionnel ) après les 3 premiers chiffres.
  • [- ]? : Ensuite, le numéro de téléphone peut comporter un trait d'union facultatif ( - ) après ) s'il est présent ou après les 3 premiers chiffres.
  • (\d{3}) : Il doit alors y avoir 3 chiffres supplémentaires. Par exemple (308)-135 o 308-135 o 308135
  • [- ]? : Après la deuxième série de 3 chiffres, le numéro de téléphone peut comporter un autre trait d'union facultatif ( - ). Par exemple (308)-135- o 308-135- o 308135-
  • (\d{4})$/ : Enfin, le numéro de téléphone doit se terminer par quatre chiffres. Par exemple (308)-135-7895 o 308-135-7895 o 308135-7895 o 3081357895 .

    Référence :

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

0voto

Vous pouvez utiliser cette fonction 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;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X