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.

2voto

Adnan Zaheer Points 143

Essayez ceci expression régulière

/[^0-9+() -.]/g

Exemple d'utilisation :

<input type="tel" id="txtUserMobile" onkeyup="this.value=this.value.replace(/[^0-9+() -.]/g,'')">

Appréciez

1voto

Luc Veronneau Points 124

Je dois admettre que la validation des numéros de téléphone est une tâche difficile. En ce qui concerne ce problème spécifique, je changerais la regex de

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

à

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

car le seul élément supplémentaire qui devient inutile est le dernier tiret/espace.

1voto

parijat Points 1

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

Les ? signifie que le groupe précédent doit être comparé zéro ou une fois. Le groupe (-|\s) correspondra soit à un - ou un | caractère.

1voto

Si vous utilisez la balise input, ce code vous aidera. J'ai écrit ce code moi-même et je pense que c'est une très bonne façon d'utiliser l'entrée, mais vous pouvez le modifier en utilisant votre format. Cela aidera l'utilisateur à corriger son format sur la balise input.

$("#phone").on('input', function() {  //this is use for every time input change.
        var inputValue = getInputValue(); //get value from input and make it usefull number
        var length = inputValue.length; //get lenth of input

        if (inputValue < 1000)
        {
            inputValue = '1('+inputValue;
        }else if (inputValue < 1000000) 
        {
            inputValue = '1('+ inputValue.substring(0, 3) + ')' + inputValue.substring(3, length);
        }else if (inputValue < 10000000000) 
        {
            inputValue = '1('+ inputValue.substring(0, 3) + ')' + inputValue.substring(3, 6) + '-' + inputValue.substring(6, length);
        }else
        {
            inputValue = '1('+ inputValue.substring(0, 3) + ')' + inputValue.substring(3, 6) + '-' + inputValue.substring(6, 10);
        }       
        $("#phone").val(inputValue); //correct value entered to your input.
        inputValue = getInputValue();//get value again, becuase it changed, this one using for changing color of input border
       if ((inputValue > 2000000000) && (inputValue < 9999999999))
      {
          $("#phone").css("border","black solid 1px");//if it is valid phone number than border will be black.
      }else
      {
          $("#phone").css("border","red solid 1px");//if it is invalid phone number than border will be red.
      }
  });

    function getInputValue() {
         var inputValue = $("#phone").val().replace(/\D/g,'');  //remove all non numeric character
        if (inputValue.charAt(0) == 1) // if first character is 1 than remove it.
        {
            var inputValue = inputValue.substring(1, inputValue.length);
        }
        return inputValue;
}

1voto

Mike T Points 111

Je voulais juste ajouter une solution spécifique pour la sélection de numéros de téléphone non locaux (types 800 et 900).

(\+?1[-.(\s]?|\()?(900|8(0|4|5|6|7|8)\3+)[)\s]?[-.\s]?\d{3}[-.\s]?\d{4}

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