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 et mauvaise syntaxe [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2002
    Messages : 329
    Points : 139
    Points
    139
    Par défaut preg_match et mauvaise syntaxe
    Bonjour,

    Voici les deux fonctions suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //EstNombre vérifie que le mot est bien un nombre
      function EstNombre($e)
     {
     	$moule="#[0-9]#i";
     	return preg_match($moule, $e);
     }
    Lorsque j'execute la fonction suivante par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo EstNombre("3000");
    Le problème est que je souhaite avoir la valeur True m'indiquant que la chaine est bien un nombre.
    Or elle me retourne 0 car elle m'indique à juste titre que la première lettre est un chiffre.

    Moi, je veux uniquement un retour type true si c'est un nombre ou false si c'est un mot ou une phrase.
    pouvez-vous m'aider? svp merci

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ton exemple retourne 1 pas 0.

    Par contre ton expression est fausse : tu vérifies juste s'il y a un chiffre dans ta chaîne.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     function EstNombre($e)
     {
     	$moule="#[^0-9]#i"; // autre chose qu'un chiffre
     	return !preg_match($moule, $e); // on retourne le contraire : si on a trouvé quelque chose, on retourne FALSE
     }
     
    var_dump(EstNombre("3000"));

  3. #3
    Membre chevronné Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Points : 1 895
    Points
    1 895
    Par défaut
    regarde la documentation de la fonction :
    http://php.net/preg_match

    cette fonction retourne le nombre de fois que le masque a été trouvé

  4. #4
    Expert confirmé
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Points : 4 853
    Points
    4 853
    Par défaut
    Salut,
    si ta vérification ne se limite qu'aux entiers, la fonction is_numeric est ton amie.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 144
    Points : 161
    Points
    161
    Par défaut
    Citation Envoyé par Thes32 Voir le message
    Salut,
    si ta vérification ne se limite qu'aux entiers, la fonction is_numeric est ton amie.
    is_numeric ne se limite pas qu'aux entiers, justement... Relis la doc.

  6. #6
    Expert confirmé
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Points : 4 853
    Points
    4 853
    Par défaut
    Citation Envoyé par asdf007 Voir le message
    is_numeric ne se limite pas qu'aux entiers, justement... Relis la doc.
    Tout à fait.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    C'est là qu'on se rend compte que la souplesse et le foisonnement de fonctions de PHP ne rendent pas toujours la vie facile.

    ctype_digit() correspond à ce que le masque est sensé renvoyer.
    http://fr.php.net/manual/fr/function.ctype-digit.php

    Par contre cette fonction n'est pas souple du tout, ce qui est déroutant

  8. #8
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2002
    Messages : 329
    Points : 139
    Points
    139
    Par défaut
    function EstNombre($e)
    {
    $moule="#[^0-9]#i"; // autre chose qu'un chiffre
    return !preg_match($moule, $e); // on retourne le contraire : si on a trouvé quelque chose, on retourne FALSE
    }

    var_dump(EstNombre("3000"));
    ok, pas bête cette histoire !

    Merci bien

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

Discussions similaires

  1. Mauvaise syntaxe sur test
    Par bzh56 dans le forum Bases de données
    Réponses: 13
    Dernier message: 10/10/2007, 21h57
  2. Réponses: 2
    Dernier message: 24/05/2007, 21h22
  3. [MySQL] Mauvaise syntaxe d'une requete
    Par DonKnacki dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/01/2007, 11h10
  4. [Mail] *PHP* |Variables| Mauvaise syntaxe
    Par jilibi dans le forum Langage
    Réponses: 18
    Dernier message: 15/11/2005, 18h16
  5. Pblme simple de requete ! (mauvaise syntaxe)
    Par ju360modena dans le forum ASP
    Réponses: 12
    Dernier message: 10/06/2005, 10h22

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