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

356voto

maerics Points 47743

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 permet l'utilisation de l'option +1 code international :

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"

41voto

Sean Bright Points 39480
var x = '301.474.4062';

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

alert(x);

40voto

ioseb Points 7009

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

14voto

David Baucum Points 342

Cette réponse emprunte à la réponse de maerics. Elle s'en distingue principalement par le fait qu'elle accepte des numéros de téléphone partiellement saisis et qu'elle 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

7voto

mikryz Points 330

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 façons imaginables d'écrire un numéro de téléphone américain. Le résultat est formaté sous la forme standard de (987) 654-3210 x123.

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