227 votes

Valider un numéro de téléphone avec JavaScript

J'ai trouvé ce code sur un site web, et il fonctionne parfaitement. Il valide que le numéro de téléphone est dans l'un de ces formats :
(123) 456-7890 ou 123-456-7890

Le problème est que mon client (je ne sais pas pourquoi, peut-être des trucs de client) veut ajouter un autre format, les dix numéros consécutifs, quelque chose comme ça : 1234567890 .

J'utilise cette expression régulière,

/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/

Comment puis-je ajouter qu'il valide également l'autre format ? Je ne suis pas doué pour les expressions régulières.

3voto

user2288580 Points 41

Ce reg ex est adapté aux numéros de téléphone internationaux et aux différents formats de numéros de téléphone mobile.

Voici l'expression régulière : /^(+{1} \d {2,3} \s ?[(]{1} \d {1,3}[)]{1} \s ? \d +|+ \d {2,3} \s {1} \d +| \d +){1}[ \s |-] ? \d +([ \s |-] ? \d +){1,2}$/

Voici la fonction JavaScript

function isValidPhone(phoneNumber) {
    var found = phoneNumber.search(/^(\+{1}\d{2,3}\s?[(]{1}\d{1,3}[)]{1}\s?\d+|\+\d{2,3}\s{1}\d+|\d+){1}[\s|-]?\d+([\s|-]?\d+){1,2}$/);
    if(found > -1) {
        return true;
    }
    else {
        return false;
    }
}

Il valide les formats suivants :

+44 07988-825 465 (avec n'importe quelle combinaison de traits d'union à la place de l'espace, sauf que seul un espace doit suivre le +44)

+44 (0) 7988-825 465 (avec n'importe quelle combinaison de traits d'union à la place des espaces, sauf qu'il ne peut y avoir de trait d'union directement avant ou après le (0) et que l'espace avant ou après le (0) ne doit pas exister)

123 456-789 0123 (avec toute combinaison de traits d'union à la place des espaces)

123-123 123 (avec n'importe quelle combinaison de tirets à la place des espaces)

123 123456 (l'espace peut être remplacé par un trait d'union)

1234567890

Il ne peut y avoir de double espace ou de double trait d'union pour tous les formats.

2voto

Erasmus Points 31

Les réponses des uns et des autres sont excellentes, mais en voici une qui me semble un peu plus complète...

Ceci est écrit pour l'utilisation en javascript d'un seul nombre dans une seule ligne :

^(?!.*911.*\d{4})((\+?1[\/ ]?)?(?![\(\. -]?555.*)\( ?[2-9][0-9]{2} ?\) ?|(\+?1[\.\/ -])?[2-9][0-9]{2}[\.\/ -]?)(?!555.?01..)([2-9][0-9]{2})[\.\/ -]?([0-9]{4})$

Si vous souhaitez que la correspondance se fasse à la limite des mots, il suffit de remplacer les ^ et $ par \b

Toute suggestion, correction ou critique concernant cette solution est la bienvenue. Pour autant que je puisse en juger, cette solution correspond au format NANP (pour les numéros américains - je n'ai pas validé les autres pays d'Amérique du Nord lors de la création de cette solution), évite toute erreur de la part du 911 (ne peut être dans l'indicatif régional ou dans le code de région), et n'élimine que les numéros 555 qui sont réellement invalides (code de région de 555 suivi de 01xx où x = n'importe quel numéro).

2voto

student Points 87

Cette fonction a bien fonctionné pour nous :

let isPhoneNumber = input => {

  try {
    let ISD_CODES = [93, 355, 213, 1684, 376, 244, 1264, 672, 1268, 54, 374, 297, 61, 43, 994, 1242, 973, 880, 1246, 375, 32, 501, 229, 1441, 975, 591, 387, 267, 55, 246, 1284, 673, 359, 226, 257, 855, 237, 1, 238, 1345, 236, 235, 56, 86, 61, 61, 57, 269, 682, 506, 385, 53, 599, 357, 420, 243, 45, 253, 1767, 1809, 1829, 1849, 670, 593, 20, 503, 240, 291, 372, 251, 500, 298, 679, 358, 33, 689, 241, 220, 995, 49, 233, 350, 30, 299, 1473, 1671, 502, 441481, 224, 245, 592, 509, 504, 852, 36, 354, 91, 62, 98, 964, 353, 441624, 972, 39, 225, 1876, 81, 441534, 962, 7, 254, 686, 383, 965, 996, 856, 371, 961, 266, 231, 218, 423, 370, 352, 853, 389, 261, 265, 60, 960, 223, 356, 692, 222, 230, 262, 52, 691, 373, 377, 976, 382, 1664, 212, 258, 95, 264, 674, 977, 31, 599, 687, 64, 505, 227, 234, 683, 850, 1670, 47, 968, 92, 680, 970, 507, 675, 595, 51, 63, 64, 48, 351, 1787, 1939, 974, 242, 262, 40, 7, 250, 590, 290, 1869, 1758, 590, 508, 1784, 685, 378, 239, 966, 221, 381, 248, 232, 65, 1721, 421, 386, 677, 252, 27, 82, 211, 34, 94, 249, 597, 47, 268, 46, 41, 963, 886, 992, 255, 66, 228, 690, 676, 1868, 216, 90, 993, 1649, 688, 1340, 256, 380, 971, 44, 1, 598, 998, 678, 379, 58, 84, 681, 212, 967, 260, 263],
      //extract numbers from string
      thenum = input.match(/[0-9]+/g).join(""),
      totalnums = thenum.length,
      last10Digits = parseInt(thenum) % 10000000000,
      ISDcode = thenum.substring(0, totalnums - 10);

    //phone numbers are generally of 8 to 16 digits
    if (totalnums >= 8 && totalnums <= 16) {
      if (ISDcode) {
        if (ISD_CODES.includes(parseInt(ISDcode))) {
          return true;
        } else {
          return false;
        }
      } else {
        return true;
      }
    }
  } catch (e) {}

  return false;
}

console.log(isPhoneNumber('91-9883208806'));

2voto

VVV Points 31

Valider le numéro de téléphone + renvoyer des données formatées

function validTel(str){
  str = str.replace(/[^0-9]/g, '');
  var l = str.length;
  if(l<10) return ['error', 'Tel number length < 10'];

  var tel = '', num = str.substr(-7),
      code = str.substr(-10, 3),
      coCode = '';
  if(l>10) {
    coCode = '+' + str.substr(0, (l-10) );
  }
  tel = coCode +' ('+ code +') '+ num;

  return ['succes', tel];
}

console.log(validTel('+1 [223] 123.45.67'));

2voto

Sergii Sopin Points 387

J'ai pris celui fourni par @marty et l'ai modifié un peu pour accommoder plus de cas :

/^[\+]?([0-9][\s]?|[0-9]?)([(][0-9]{3}[)][\s]?|[0-9]{3}[-\s\.]?)[0-9]{3}[-\s\.]?[0-9]{4,6}$/im

Formats valables :

  1. +1 123 4567890
  2. +11234567890
  3. +1(123)4567890
  4. +1(123)456-7890
  5. +1 (123) 456-7890
  6. +1 (123)456 7890
  7. +1 123 456-7890
  8. +1 123 456 7890
  9. +1 123-456-7890
  10. 123-456-7890
  11. 123 456-7890
  12. 123 456 7890
  13. 123 4567890
  14. 1234567890

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