Partage
  • Partager sur Facebook
  • Partager sur Twitter

Limiter le nombre d'espaces à répétition REGEXP

FILTER_VALIDATE_REGEXP

Sujet résolu
    26 avril 2017 à 19:51:11

    Bonjour la communauté. 

    Mon problème se situe à la partie Regexp qui n'accepte que les espaces, les minucules et majuscule pour faire simple.  Mais, le problème est que quelqu'un peut placer que des espaces ou insérer des espace à répétition sans fin dans le texte. Je voudrais limiter à trois la répétition d'espace peut importe l'endroit (que ce soit au début, à la fin ou encore à quelque part dans le text).  Je dois absolument utiliser toute la ligne de mon code et ne modifier que la partie REGEXP qui se trouve être :

    ^[a-zA-Z\s]{1,1000}$

    dans ceci:

    (!filter_input(INPUT_POST, "name", FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Z\s]{1,1000}$/"))) === false)

    J'apprécierai l'aide.

    • Partager sur Facebook
    • Partager sur Twitter
      26 avril 2017 à 21:13:51

      > Je voudrais limiter à trois la répétition d'espace peut importe l'endroit (que ce soit au début, à la fin ou encore à quelque part dans le text)

      Le mieux qu'on puisse faire dès lors faire, je pense, doit être : ~^\s{0,3}[[:alpha:]]+(?:\s{1,3}[[:alpha:]]+)*\s{0,3}$~

      -
      Edité par julp 26 avril 2017 à 21:16:13

      • Partager sur Facebook
      • Partager sur Twitter
        27 avril 2017 à 16:06:19

        Merci julp pour votre solution et intervention.

        J'ai fais plusieurs tests avec http://www.phpliveregex.com/ de différentes hypothèses et j'arrive à la conclusion
        que la meilleur solution est de convertir les espaces avec un preg_replace pour n'en faire qu'un.

        ^[\s\w\p{P}]{2,15}$

        Aussi, votre solution, je n'ai pas trouvé comment j'aurai pu limiter globalement le nombre de caractères.

        Si j'aurai pu placer \s{0.3} à la place de \s dans cet exemple, ça aurait fait plus mon affaire. Mais, encore là,
        un long texte de 1000 caractères, si dans le formulaire, on mets par accident un espace de trop, ça rejette
        le texte pour rien. Alors, vaut mieux faire un nettoyage des espaces en trop avec un preg_replace et accepter
        au final le texte.

        Merci quand même vu que ça m'aura fait creuser les méninges. :-)

        trim(preg_replace('/\s{2,}/',' ', $_POST["name"));

        ça nettoie les espaces en trop après, je passe le résultats à la validation.


        • Partager sur Facebook
        • Partager sur Twitter

        Limiter le nombre d'espaces à répétition REGEXP

        × 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