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 :

Ereg avec un probleme REG_ERANGE [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 29
    Points : 21
    Points
    21
    Par défaut Ereg avec un probleme REG_ERANGE
    J'essaye de vérifier qu'une année soit bien comprise entre 1908 et 1988

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    if(!ereg("^[1900-1988]{4}$", $_POST["annee"]))
     
    		{
    			echo "Date invalide<br />";
     
    		}
    Mais j'ai cette erreur?!
    Warning: ereg() [function.ereg]: REG_ERANGE in C:\xampplite\htdocs\form.php on line 54

  2. #2
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 183
    Points : 121
    Points
    121
    Par défaut
    Il semble que les PCRE sont a privilégier (http://fr.php.net/manual/fr/function.intval.php), donc plutôt preg_match.

    Cela dit, personnellement quand je peut me passer des regex, je le fait. Dans ton cas j'aurais plus naturellement fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    $int_dateval = intval($_POST["annee"]);
     
    if(($int_dateval<1900)||($int_dateval>1988))
    {
     echo "\nDate invalide<br />\n";
    }
    Autant profiter du regex caché dans le intval (pas besoin de réinventer la poudre). Non

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 29
    Points : 21
    Points
    21
    Par défaut
    Oui effectivement je pensais à cette solution dans le cas ou ereg ne marchait pas; mais ce n'est vraiment pas possible de l'utiliser dans cette situation ?

    Dans votre solution:
    Pourquoi convertir un année qui est déja un entier ? Je ne comprend pas

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Points : 910
    Points
    910
    Par défaut
    Oui effectivement je pensais à cette solution dans le cas ou ereg ne marchait pas; mais ce n'est vraiment pas possible de l'utiliser dans cette situation ?
    Non ce n'est pas possible. Les expression régulières travaillent sur des caractères. L'expression [1900-1988] signifie littéralement "1 ou 9 ou 0 ou un caractère compris entre 0 et 1 ou 9 ou 8 ou 8", ce qui revient à écrire [0189].

    Dans votre solution:
    Pourquoi convertir un année qui est déja un entier ? Je ne comprend pas
    Le tableau $_POST contient toujours des chaînes de caractères, même si cette chaîne représente un entier. intval() permet de convertir cette chaine en un entier. Par exemple dans ce cas précis, si on enlève le intval(), la chaine "1950truc" sera acceptée. intval() permet de s'assurer qu'on manipule bien un nombre et pas quelque chose qui y ressemble vaguement

  5. #5
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 183
    Points : 121
    Points
    121
    Par défaut
    Dans le cas d'une fonction, l'interêt c'est d'être sur du type avec lequel on travaille. J'ai toujours l'habitude de m'assurer que le test s'effectue bien sur le bon type de données.

    Le PHP est un langage faiblement déclaratif : c'est pratique de ne pas déclarer le type des données manipulées (rapide à coder), mais en contre partie ça ouvre la porte à plus de bug.

    voila ce qui peut arriver on retire le transtypage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $str_dateval = '1920';
    //$int_dateval = intval($str_dateval);
    if(($int_dateval<1900)||($int_dateval>1988))echo "\nDate invalide<br />\n";
    else echo "\nDate ok<br />\n";
    Bin ici ça retourne "Date invalide"

    Et comme je veux un test valide même si la date est transmise en format texte...
    Bien sur le fait de faire un transtypage sur le même type ne pose pas de pb :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $int_dateval = 1920;
     
    $int_dateval = intval($int_dateval);
    if(($int_dateval<1900)||($int_dateval>1988))echo "\nDate invalide<br />\n";
    else echo "\nDate ok<br />\n";
    1920 reste 1920, ça retourne "Date ok"

    Pour un code plus robuste, mon intval() ne me coute pas beaucoup plus cher.


  6. #6
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 29
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par Taum Voir le message
    Non ce n'est pas possible. Les expression régulières travaillent sur des caractères. L'expression [1900-1988] signifie littéralement "1 ou 9 ou 0 ou un caractère compris entre 0 et 1 ou 9 ou 8 ou 8", ce qui revient à écrire [0189].

    Le tableau $_POST contient toujours des chaînes de caractères, même si cette chaîne représente un entier. intval() permet de convertir cette chaine en un entier. Par exemple dans ce cas précis, si on enlève le intval(), la chaine "1950truc" sera acceptée. intval() permet de s'assurer qu'on manipule bien un nombre et pas quelque chose qui y ressemble vaguement
    Merci , j'avais fini par trouver tout seul le coup du [1-31].

    Cependant je me demande si l'utilisation de intval() est vraiment utilite dans mon cas car le choix de l'année s'effecture grace à un select.

  7. #7
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 183
    Points : 121
    Points
    121
    Par défaut
    Lis au-dessus (nos posts se sont croisés)

  8. #8
    Membre à l'essai
    Inscrit en
    Novembre 2003
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 29
    Points : 21
    Points
    21
    Par défaut
    J'ai bien lu ton post mais comme dans un select tu impose ce que l'utilisateur il n'y a aucune chance que l'utilisateur ait "1950truc" (à part si il modifie le formulaire lui-meme; mais j'y ait pensé en verifiant avec un regex)

    Oups j'ai compris juste en écrivant ma réponse

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/02/2008, 09h06
  2. Merge avec un probleme d'index
    Par Flipmode dans le forum SQL
    Réponses: 3
    Dernier message: 19/06/2007, 15h14
  3. probleme avec dblookupcombobox (probleme 1)
    Par m_jaz3 dans le forum Bases de données
    Réponses: 3
    Dernier message: 11/03/2007, 18h02
  4. Réponses: 3
    Dernier message: 04/05/2006, 15h44
  5. Réponses: 2
    Dernier message: 22/07/2004, 00h27

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