RegEx lettre ou . ou -

Salut,

je débute en javascript,

après quelques heures de recherche je n'ai rien trouvé de concluant pour avoir une regex qui me permettrait de valider un champ qui peut contenir:

des lettres (avec ou sans accents peut importe)
des .
des -

autant de fois chacun que désiré peu importe l'ordre

ex: .blabla-bla.blaa--..b ou autre affaire dans ce genre

j'ai trouvé un truc du genre:

([a-zA-Z]|\.|-)*

que j'utilise comme ceci :

function validerAuteur(auteurTester){
var reg3 = new RegExp('([a-zA-Z]|\.|-)*');
return(reg3.test(auteurTester));
}

ceci se retrouve dans un fichier .js

mais lorsque je met 123 par exemple dans le champ Auteur du formulaire ça valide au lieu de bloquer :/

le code de la fonction ou ceci est utilisé:


function valider2() {
var message = "";
var message1 = "";
var message2 = "";
var message3 = "";
var auteurTest = (document.forms[0].auteur.value);
var anneeTest = (document.forms[0].annee.value);
var nbPagesTest = (document.forms[0].nbPages.value);
if ((document.forms[0].titre.value!="") && (document.forms[0].isbn.value!="")){
//vérification de l'auteur, de la date et du nombres de pages
//si auteur pas vide on vérifie le contenu
if (auteurTest != "") {
if (!validerAuteur(auteurTest)){
message1 = "L'auteur ne peut contenir que:";
message1 += "\n\t-des lettres";
mesasge1 += "\n\t-des tirets (-)";
mesasge1 += "\n\t-des points (.)";
} //pas de else, auteur ok
}
//si annee pas vide on vérifie le contenu
if (anneeTest != "") { //ok
//alert(anneeTest);
if (!validerEntier(anneeTest)){
message2 = "L'année doit-être un entier.";
} //pas de else, annee ok
}
//si nbPages pas vide on vérifie le contenu
if (nbPagesTest != "") { //ok
if (!validerEntier(nbPagesTest)){
message3 = "Le nombre de pages doit-être un entier.";
} //pas de else, pages ok
}

} else {
message += "L'ISBN et le titre sont obligatoires";
}

//assembler les messages ici
if (message1 != "") {
message = message1;
}

if (message2 != "") {
if (message != "") {
message += "\n---";
message += "\n" + message2;
} else {
message = message2;
}
}

if (message3 != "") {
if (message != "") {
message += "\n---";
message += "\n" + message3;
} else {
message = message3;
}
}

if (message == "") {
return true;
} else {
alert(message);
return false;
}
}


les autres validations (avec message2 et message3) fonctionnent très bien avec leur propres règles de regex...

aurais-je loupé quelque chose ? merci de votre aide :)

16 réponses

  • Votes
  • Date
  • Date décroissante
  1. et pourquoi pas rajouter une condition qui renvoie un texte d'erreur si il y a des chiffre genre == [0-9]*
    1. parce qu'il ne faut pas qu'il n'y est pas que pas de chiffres :s (pas très clair peut-être ? lol
      1. ou bien peut être un truc du genre
        '([a-zA-Z]|\.|-)*' && !([0-9]*) bon je suis pas sur de la syntaxe
        1. bah le truc c'est qu'il ne faut pas de caractères spéciaux

          en fait il ne faut que des lettres des . ou des -

          :/

          ce qui rend cette regex complexe je trouve

          on peut aussi y aller en mode combinaison de if et de regex mais j'ai pas trouvé d'algo correct pour :(
          1. Hello, voici un pattern qui devrait te convenir:
            var pattern = /^[\w\u00E0-\u00FC\.-]+$/i;
            1. malheureusement lorsque je met par exemple 123 dans le champ associé, ça valide le formulaire quand même, hors cela ne devrait pas :(

              peut-être faudrait-il revoir la façon dont j'utilise cette regex (mais je l'utilise comme les autres..)

              exemple pour les autres :

              function validerMail(mailTester){
              var reg1 = new RegExp('^[a-z0-9]+([_|\.|-]{1}[a-z0-9]+)*@[a-z0-9]+([_|\.|-]{1}[a-z0-9]+)*[\.]{1}[a-z]{2,6}$', 'i');
              return(reg1.test(mailTester));
              }

              function validerMDP(mdpTester){
              var reg2 = new RegExp('^(?=.{6,15}$)(?=.*[0-9])(?=.*[a-zA-Z]).*');
              return(reg2.test(mdpTester));
              }

              peut-être que dans mon code plus haut (dans la première fonction qui utilise l'ensemble) j'ai mal codé quelque chose (assemblage des messages ? vérification des conditions ?) mais cela me semble plutôt correct, au besoin je recolle le code avec indentation ;)
              1. Remplace juste le \w par a-zA-Z, de la sorte: var pattern = /^[a-zA-Z\u00E0-\u00FC\.-]+$/i;
                1. J'ai essayer aussi, toujours le même résultat (ça laisse passé 123 dans le champ auteur) :/ ce qui ne devrait pas arriver :/
                  1. chez moi, elle bloque les numériques:


                    <html>
                    <head>
                    <title></title>
                    <meta charset="utf-8">
                    </head>
                    <body>
                    Pattern: <input type="text" size="30" id="pattern" disabled="disable"><br />
                    <input type="text" placeholder="chaîne à tester" id="toto">
                    <button>Test</button>
                    <script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
                    <script type="text/javascript">
                    var pattern = /^[a-zA-Z\u00E0-\u00FC\.-]+$/i;
                    $('#pattern').val(pattern);
                    $('button').click(function(){
                    var string = $('#toto').val();
                    var test = new RegExp(pattern);
                    alert(test.test(string) ? string + ' est valide': string + ' est invalide');
                    });
                    </script>
                    </body>
                    </html>
                    1. pour info, c'est pour un devoir (que j'ai déjà remis)

                      je voudrais résoudre le trouble pour mieux comprendre ce qui ne va pas et comment le résoudre si jamais je retombe dans le même genre de problèmes par la suite

                      Voici le script au complet:

                      function createCookie(name,value,days) {
                      if (days) {
                      var date = new Date();
                      date.setTime(date.getTime()+(days*24*60*60*1000));
                      var expires = "; expires="+date.toGMTString();
                      }
                      else expires = "";
                      document.cookie = name+"="+value+expires+"; path=/";
                      }

                      function readCookie(name) {
                      var nameEQ = name + "=";
                      var ca = document.cookie.split(';');
                      for(var i=0;i < ca.length;i++) {
                      var c = ca[i];
                      while (c.charAt(0)==' ') c = c.substring(1,c.length);
                      if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
                      }
                      return null;
                      }

                      function getPreferredStyleSheet() {
                      var i, a;
                      for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
                      if(a.getAttribute("rel").indexOf("style") != -1
                      && a.getAttribute("rel").indexOf("alt") == -1
                      && a.getAttribute("title")
                      ) return a.getAttribute("title");
                      }
                      return null;
                      }

                      function getActiveStyleSheet() {
                      var i, a;
                      for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
                      if(a.getAttribute("rel").indexOf("style") != -1
                      && a.getAttribute("title")
                      && !a.disabled) return a.getAttribute("title");
                      }
                      return null;
                      }

                      function setActiveStyleSheet(title) {
                      var i, a, main;
                      for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
                      if(a.getAttribute("rel").indexOf("style") != -1
                      && a.getAttribute("title")) {
                      a.disabled = true;
                      if(a.getAttribute("title") == title) a.disabled = false;
                      }
                      }
                      }

                      function initiate() {
                      document.getElementById("theme1").style.display="block";
                      document.getElementById("theme1").style.backgroundColor="#00ff00";
                      document.getElementById("theme1").style.width="30px";
                      document.getElementById("theme1").style.textDecoration="none";

                      document.getElementById("theme2").style.display="block";
                      document.getElementById("theme2").style.backgroundColor="#000000";
                      document.getElementById("theme2").style.width="30px";
                      document.getElementById("theme2").style.textDecoration="none";

                      document.getElementById("theme1").onclick = function() {
                      setActiveStyleSheet("theme1");
                      return false;
                      }
                      document.getElementById("theme2").onclick = function() {
                      setActiveStyleSheet("theme2");
                      return false;
                      }

                      }

                      //permet d'initialiser certaines fonctionnalité lors du chargement des pages
                      window.onload = function(e) {
                      var cookie = readCookie("style");
                      var title = cookie ? cookie : getPreferredStyleSheet();
                      setActiveStyleSheet(title);
                      initiate();

                      //permet de voir s'il y a le formulaire de login pour appeler la bonne fonction de vérification
                      var vLogin = document.getElementById("loginForm");
                      if (vLogin) {
                      document.forms[0].onsubmit = function() {
                      return valider1();
                      }
                      }
                      //permet de voir s'il y a le formulaire d'ajout de livre pour appeler la bonne fonction de vérification
                      var vAjouter = document.getElementById("addBook");
                      if (vAjouter) {
                      document.forms[0].onsubmit = function () {
                      return valider2();
                      }
                      }
                      }

                      window.onunload = function(e) {
                      var title = getActiveStyleSheet();
                      createCookie("style", title, 365);
                      }

                      //permet de vérifier le bon format du courriel et du mot de passe lors de l'envoi du formulaire
                      function valider1() { //fonctionne

                      var message = "";
                      //on vérifie s'ils sont vides
                      if ((document.forms[0].numid.value!="") && (document.forms[0].mdp.value!="")){
                      //variables pour la vérification par les fonctions
                      var idTest = (document.forms[0].numid.value);
                      var mdpTest = (document.forms[0].mdp.value);
                      //pas vides alors on vérifie le courriel
                      if (validerMail(idTest)){
                      //on vérifie le mot de passe
                      if (!validerMDP(mdpTest)){
                      //mdp incorrect, on contruit le message d'erreur
                      message += "Mot de passe invalide!";
                      message += "\n\nLe mot de passe doit respecter les règles suivantes:";
                      message += "\n\t-6 caractères minimum";
                      message += "\n\t-15 caractères maximum";
                      message += "\n\t-contenir au moins un chiffre";
                      message += "\n\t-contenir au moins une lettre";
                      } //pas de else, tout est bon
                      } else { //l'id est incorrect
                      message += "L'ID doit-être un courriel valide.";
                      message += "\n\nExemple:";
                      message += "\n\n\texemple@domain.com";
                      }
                      } else { //le numId et/ou le mdp est vide, on construit le message d'erreur
                      message += "Le numéro d'ID et le mot de passe sont obligatoires";
                      }

                      //vérification des messages pour voir s'il y a des erreurs et donc envoyer le formulaire ou non
                      if (message == "") {
                      return true;
                      } else {
                      alert(message);
                      return false;
                      }
                      }

                      //permet de vérifier le bon format de certains des champs du formulaire d'ajout d'un livre
                      function valider2() {
                      //variables d'usage pour vérifications diverses:
                      //pour les messages d'erreurs
                      var message = "";
                      var message1 = "";
                      var message2 = "";
                      var message3 = "";
                      //pour les contenu à vérifier
                      var auteurTest = (document.forms[0].auteur.value);
                      var anneeTest = (document.forms[0].annee.value);
                      var nbPagesTest = (document.forms[0].nbPages.value);
                      //on vérifie s'ils sont vides (pour le titre et l'isbn obligatoire)
                      if ((document.forms[0].titre.value!="") && (document.forms[0].isbn.value!="")){
                      //pas vides donc vérification de l'auteur, de la date et du nombres de pages.
                      //si auteur pas vide on vérifie le contenu
                      if (auteurTest != "") {
                      if (!validerAuteur(auteurTest)){ //la regex associée ne fonctionne pas, voir plus bas
                      //contenu incorrect, on construit le message d'erreur
                      message1 = "L'auteur ne peut contenir que:";
                      message1 += "\n\t-des lettres";
                      mesasge1 += "\n\t-des tirets (-)";
                      mesasge1 += "\n\t-des points (.)";
                      } //pas de else, auteur ok
                      }
                      //si annee pas vide on vérifie le contenu
                      if (anneeTest != "") {
                      if (!validerEntier(anneeTest)){
                      message2 = "L'année doit-être un entier.";
                      } //pas de else, annee ok
                      }
                      //si nbPages pas vide on vérifie le contenu
                      if (nbPagesTest != "") {
                      if (!validerEntier(nbPagesTest)){
                      message3 = "Le nombre de pages doit-être un entier.";
                      } //pas de else, pages ok
                      }

                      } else { // l'isbn et/ou le titre est vide, on construit le message d'erreur
                      message += "L'ISBN et le titre sont obligatoires";
                      }

                      //assemblage des messages ici pour avoir qu'une seule alerte qui rassemble tout
                      if (message1 != "") {
                      message = message1;
                      }

                      if (message2 != "") {
                      if (message != "") {
                      message += "\n---";
                      message += "\n" + message2;
                      } else {
                      message = message2;
                      }
                      }

                      if (message3 != "") {
                      if (message != "") {
                      message += "\n---";
                      message += "\n" + message3;
                      } else {
                      message = message3;
                      }
                      }

                      if (message == "") {
                      return true;
                      } else {
                      alert(message);
                      return false;
                      }
                      }

                      //permet de vérifier le format d'un courriel
                      function validerMail(mailTester){ //fonctionne
                      var reg1 = new RegExp('^[a-z0-9]+([_|\.|-]{1}[a-z0-9]+)*@[a-z0-9]+([_|\.|-]{1}[a-z0-9]+)*[\.]{1}[a-z]{2,6}$', 'i');
                      return(reg1.test(mailTester));
                      }

                      //permet de vérifier le format du contenu du mot de passe
                      function validerMDP(mdpTester){
                      var reg2 = new RegExp('^(?=.{6,15}$)(?=.*[0-9])(?=.*[a-zA-Z]).*');
                      return(reg2.test(mdpTester));
                      }

                      //permet de vérifier le format du contenu de l'auteur
                      function validerAuteur(auteurTester){ //aucune regex trouvées pour ça, voici quelques exemples possibles mais aucuns ne fonctionnent correctement
                      //var reg3 = new RegExp('/^[a-zA-Z\u00E0-\u00FC\.-]'.'i');
                      var reg3 = new RegExp('([a-zA-Z]|\.|-)*');
                      //var reg3 = new RegExp('/^[\w\u00E0-\u00FC\.-]','$/i');
                      //var reg3 = /^[\w\u00E0-\u00FC\.-]+$/i;
                      //var reg3 = new RegExp(/[^a-z|\.|\-]/i);
                      return(reg3.test(auteurTester));
                      }

                      //permet de vérifier le format d'un entier
                      function validerEntier(entierTester){
                      var reg4 = new RegExp('^[0-9]+$');
                      return(reg4.test(entierTester));
                      }