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 :

preg-match retourne un entier alors que j'attend false [RegEx]


Sujet :

Langage PHP

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut preg-match retourne un entier alors que j'attend false
    Bonsoir,

    ma regex est la suivante : $pattern = '#\A[\w\-(),. \'"]*\z#'; et ma fonction de validation est :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function validString($string):bool
            {
                $pattern = '#\A[\w\-(),. \'"]*\z#'; // \w, C pour tous les alphanumériques et le underscore (_)
     
                $ret2 = is_int( preg_match($pattern, $string) ); /* si $string respecte $pattern, preg_match retourne un
            entier mais sinon false */
                return ($ret2 ) ;
            }
    La chaîne validée est : Johannes&&.
    Les 2 & à la fin font qu'elle ne respecte pas le pattern (ce n'est pas un alphanumérique). Je l'ai vérifié avec le site : https://regex101.com/. Etant donné cela, preg_match doit retourner false, donc le test is_int devrait être à false ; or il est à true. Où est le bug dans mon raisonnement, SVP ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    affichez le retour de "preg_match" et vous verrez mieux ce qu'il se passe.

  3. #3
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    Salut,

    Il est bien dit en cas d'erreur, pas si le "pattern" n'est pas respecté. Par Exemple preg_match('/[0-9]', '1'); est une erreur , si les erreurs PHP ne sont pas activées on aura qu'un false seulement sinon un "warning" en plus.
    En même temps, je ne comprends pas l'utilité du is_int
    Le bienfait n'est jamais perdu

  4. #4
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    En effet, si le pattern n'est pas respecté mais qui y a pas d'erreur, preg_match retourne 0, donc :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     $pattern = '#\A[\w\-(),. \'"]*\z#'; // \w, C pour tous les alphanumériques et le underscore (_)
     
    $ret2 = preg_match($pattern, $string) ;
    return ($ret2 != 0) ;

    Le is_int, c'est car je croyais que si ça matchait, le retour était le nombre de matches et sinon false...

    A une heure aussi tardive, on a pas les idées claires...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/11/2014, 16h23
  2. Réponses: 8
    Dernier message: 09/07/2010, 16h02
  3. Un seul champ m'est retourné alors que je les veux tous
    Par anxious dans le forum Requêtes
    Réponses: 2
    Dernier message: 24/12/2009, 15h56
  4. Requete SQL qui ne retourne rien alors que ma table n est pas vide
    Par adelsunwind dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 02/06/2009, 19h16
  5. Réponses: 4
    Dernier message: 17/09/2008, 13h05

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