Partage
  • Partager sur Facebook
  • Partager sur Twitter

Regex

Sans 2 charactère spéciaux de suite excepté le point et l'espace.

Sujet résolu
    30 novembre 2017 à 0:00:19

    Bonjour,

    J'essais de créer une regex qui me permettrait de valider un champ qui :

    1- peut contenir des lettres majuscules ou minuscule.

    2- ne peux pas contenir de chiffres

    3- peux seulement contenir ces charactères spéciaux : le point (.) , l'espace ( ), l'apostrophe (') et le tiret (-)

    4- ces charactères spéciaux ne peux se suivre.

    5- Excepté le point(.) suivi de l'espace( ).

    J'ai actuellement ceci comme regex : ^(?!.*([-.' ]){2})[a-z-.' ]+$

    Elle fonctionne pour les points 1 à 4, mais pas pour le point 5.

    Je n'arrive pas à accepter le point(.) suivi de l'espace( )

    Ex:

    s al.utCom. me-n'tCaVa          devrais fonctionner

    s al.utCom .me-n'tCaVa          ne devrais pas fonctionner

    s al.utCom . me-n'tCaVa         ne devrais pas fonctionner

    s al..utCom. me-n'tCaVa         ne devrais pas fonctionner

    s  al.utCom. me-n'tCaVa         ne devrais pas fonctionner

    s al.utCom. me -n'tCaVa         ne devrais pas fonctionner

    Merci

    • Partager sur Facebook
    • Partager sur Twitter
      30 novembre 2017 à 9:39:02

      Salut !

      Je suis pas vraiment bon en regex, mais quand j'ai besoin d'en faire je m'aide du site regex101 pour les tester/débugger. Ça m'a sorti de la purée quelques fois !

      • Partager sur Facebook
      • Partager sur Twitter
      "On ne remplace pas des plombs sautés avant de savoir pourquoi ils ont sauté." 2001 l'odyssée de l'espace, Arthur C. Clarke
        30 novembre 2017 à 12:52:17

        Dans la même idée, j'ai utilisé durant mes cours de mon côté celui-ci : https://regexr.com/
        • Partager sur Facebook
        • Partager sur Twitter
          30 novembre 2017 à 14:32:53

          Bonjour,

          Le tout est d'abord d'identifier les différentes composantes de ton expression (et les classes de caractères qui les composent), et de procéder avec des sous-regex.

          • La première, qu'on va appeler A, ce sont les lettres, on ne va considérer ici que l'ascii, si tu as besoin d'unicode, tu prendras la classe équivalente. Lettres minuscules et majuscules, ça donne donc /[a-zA-Z]/ ;
          • La seconde, B, contenant les caractères de ponctuation, que l'on peut représenter par /[. '-]/ (pas besoin de les échapper ici, ils sont dans une classe et le tiret est placé à la fin, et attention dans ton expression, tu n'avais rien échappé, la plupart ont un sens spécifique dans l'expression) ;
          • La dernière, C, le point suivi d'un espace, qui est un cas particulier : /\. /, qu'on considérera par la suite comme un seul caractère, ce sera plus simple.

          Maintenant qu'on a ces 3 sous-parties, on les assemble pour obtenir l'expression finale. Au final, c'est quoi ton expression ?

          Une suite de A, de 0 à n éléments, optionnellement suivis plusieurs fois d'un caractère de ponctuation B ou C + une nouvelle suite de A (1 ou +), à nouveau optionnellement suivis d'un caractère de ponctuation en toute fin.

          C'est à dire quelque chose comme /^A*((B|C)A+)*(B|C)?$/. Si on fait les remplacements adéquats, on obtient /^[a-zA-Z]*(([. '-]|\. )[a-zA-Z]+)*([. '-]|\. )?$/ qui n'est plus très lisible, je te conseille de garder séparément les sous-expressions et de composer la finale à l'intérieur de ton programme. Testée et approuvée ;)

          • Partager sur Facebook
          • Partager sur Twitter
            30 novembre 2017 à 14:44:00

            Salut,

            Essaie celle la pour voir.

            Le 's' au debut est pour simuler le '^' et le '\n' a la fin le '$'

            Edit : grillé

            -
            Edité par Killerking 30 novembre 2017 à 14:46:14

            • Partager sur Facebook
            • Partager sur Twitter
              30 novembre 2017 à 16:25:08

              Merci Beaucoup de vos réponses.

              Merci à @entwanne pour ta réponse qui m'a grandement aider!!!

              • Partager sur Facebook
              • Partager sur Twitter
                30 novembre 2017 à 16:49:36

                little77 a écrit:

                Merci Beaucoup de vos réponses.

                Merci à @entwanne pour ta réponse qui m'a grandement aider!!!


                @entwanne , encore une fois, je suis jaloux. :p

                -
                Edité par Asakha 30 novembre 2017 à 16:49:46

                • Partager sur Facebook
                • Partager sur Twitter

                Regex

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown