web-dev-qa-db-fra.com

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

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:

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

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

44
Matt K

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"
115
maerics

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
23
ioseb
var x = '301.474.4062';

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

Exemple de travail ici .

17
Sean Bright

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

4
mikryz
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
1
Alex Turpin

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
1
David Baucum

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
0
jjones

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 :

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

0
Bebu