Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/09/2007, 15h28   #1
Invité régulier
 
Inscription : novembre 2003
Messages : 29
Détails du profil
Informations forums :
Inscription : novembre 2003
Messages : 29
Points : 5
Points : 5
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 :
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
About est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2007, 16h50   #2
Membre régulier
 
Inscription : mai 2007
Messages : 180
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 180
Points : 82
Points : 82
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 :
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
gomodo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2007, 16h56   #3
Invité régulier
 
Inscription : novembre 2003
Messages : 29
Détails du profil
Informations forums :
Inscription : novembre 2003
Messages : 29
Points : 5
Points : 5
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
About est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2007, 18h21   #4
Membre chevronné
 
Inscription : mai 2005
Messages : 657
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 657
Points : 722
Points : 722
Citation:
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].

Citation:
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
__________________
Toute la documentation Ruby on Rails : gotapi.com/rubyrails
Mes articles :
> HAML : langage de template pour Ruby on Rails
Taum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2007, 18h41   #5
Membre régulier
 
Inscription : mai 2007
Messages : 180
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 180
Points : 82
Points : 82
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 :
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 :
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.

gomodo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2007, 18h42   #6
Invité régulier
 
Inscription : novembre 2003
Messages : 29
Détails du profil
Informations forums :
Inscription : novembre 2003
Messages : 29
Points : 5
Points : 5
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.
About est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2007, 18h46   #7
Membre régulier
 
Inscription : mai 2007
Messages : 180
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 180
Points : 82
Points : 82
Lis au-dessus (nos posts se sont croisés)
gomodo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2007, 19h27   #8
Invité régulier
 
Inscription : novembre 2003
Messages : 29
Détails du profil
Informations forums :
Inscription : novembre 2003
Messages : 29
Points : 5
Points : 5
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
About est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h09.


 
 
 
 
Partenaires

Hébergement Web