IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Dans un filtre de validation PHP interdire avec regex plus de 3 espaces consécutifs [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut Dans un filtre de validation PHP interdire avec regex plus de 3 espaces consécutifs
    Bonjour à tout le monde.

    Dans un message, je voudrais interdire plus de trois espace consécutifs dans un filtre de validation input. Ceci est mon filtre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (!filter_input(INPUT_POST, "name", FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Z\s]{1,1000}$/"))) === false)
    Mon regexp actuel permet d'écrire autant d'espace via \s et de caractère majuscules et minuscules. Sauf qu'un message pourrait contenir 200 espaces en début
    de chaine ou partout dans la chaine. Je veux rendre invalide la chaine s'il y a plus de trois espaces consécutifs peut importe l'endroit dans la chaine.

    Je ne sais pas quoi ajouter comme regexp. Je dois utiliser absolument le filtre input comme il est la. C'est le regexp que je veux améliorer.

    Une aide serait appréciée. merci.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  2. #2
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Tu n'est pas obligé de faire une regexp pour contrôler qu'il y a au plus 3 espaces. Après il te suffit de combiner avec ton autre test.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?php
    function toto($valeur) {
     if ($valeur == str_replace('    ', '', $valeur)) {
      return true;
     } 
     return false;
    }
    print toto("     rnd   ee ttt  ttt") ? "OK" : "KO";
    print "<hr/>";
    print toto("   rnd   ee ttt  ttt") ? "OK" : "KO";
    print "<hr/>";
    print toto("rndeetttttt") ? "OK" : "KO";
    print "<hr/>";
    print toto("  rnd   ee ttt  ttt            ") ? "OK" : "KO";
    print "<hr/>";
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  3. #3
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    Ok. Passer dans la moulinette de votre fonction avant de le passer dans mon test de validation.
    :-) oui, je vais tester cela.

    Hé, merci pour le tuyo.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  4. #4
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        $_POST['name'] = trim(preg_replace('/\s{2,}/',' ', $_POST['name']));
    Supprimer tout ce qui est plus de 1 espace que je mets après mon isset.. le résultat est mis dans $_POST['name'] et traité par mon filtre input.

    Il va me rester à trouver le regexp pour accepter les caractères accentués. J'ai pensé à \w\d mais, je viens de voir que ça ne les accepte pas.

    Merci, le poste m'a permis de me mettre sur une bonne piste.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  5. #5
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Au départ j'avais pensé à ça mais comme tu avais écrit "je voudrais interdire plus de trois espace consécutifs dans un filtre" je n'ai pas poursuivi.

    J'avais aussi regardé les lookahead et lookbehind, mais en lookbehind on ne peut pas mettre un masque variable {3,}.
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  6. #6
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  7. #7
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    Merci pour la référence.
    C'est toujours bon de prendre des nouvelles idées.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  8. #8
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    Bonjour la communauté.

    Je tiens à partager mon regex qui fait ceci:

    1. Il vérifie s'il y a plus de 3 caractères identiques consécutifs.
    2. Ça inclus les ponctuations et les caractères accentués.
    3. Ça vérifie la longueur de la chaine.

    Si ça passe pas, ça indique 0 en utilisant "" pour ne pas passer
    à la phase suivante pour le traitement. Testé avec un regex tester.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $textes = (preg_match('%[^\\p{L}\\d\\p{P}\\s]+|["<>\\/\\\\]|([\\p{L}\\d\\p{P}\\s])\\1{3,}%iu', $textes) || strlen($textes)>500)?"":$textes;
    On oublie souvent la simplicité ou la base dans la vie: Maslow

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 15/12/2011, 23h33
  2. validation input dans procedure stocker avec regex
    Par longuard dans le forum SQL Procédural
    Réponses: 0
    Dernier message: 19/10/2009, 21h49
  3. Réponses: 3
    Dernier message: 05/08/2009, 00h34
  4. Réponses: 0
    Dernier message: 12/11/2007, 17h53
  5. Valider un XML avec du XMLSchema le tout dans un JAR
    Par aikidoka dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 12/03/2007, 13h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo