Aller au menu - Aller au contenu
Inscris-toi au e-camp "Héberge ton jeu Facebook sur Azure" de Microsoft vendredi 25 mai à 13h30 !

[REGEX]preg_match 00/00/0000

comment la construire

Pour accéder à cette section
Connectez-vous !
connexion_rpx

Résolu Le problème de ce sujet a été résolu

Offre d'emploi : Développeur Web PHP/Drupal (H/F)

Page 1 
Auteur Message
1 visiteur sur ce sujet (1 Anonyme)
Page 1 
Hors ligne IgiX # Posté le 04/04/2008 à 23:36:20
Avatar

Études : Epitech Paris

Bonsoir les 0

voilà mon problème : Je ne comprend rien aux regex, et il m'en faudrait une, et je ne sais pas comment la faire!
Je souhaite vérifier la validité d'un champs date de naissance, avec pour valeur jj/mm/aaaa soit 04/04/2008, mais le problème, c'est Comment faire?

Le seul truc, dont je suis sur(et encore) c'est preg_match("#^[0-9]{2}$#", $xx);
mais je block après

merci d'avance!

Image utilisateur
$variable = 'le pape'; // le pape en string
Alors Brice, aujourd'hui on va voir la programmation, tu pars bien haut, bien abstrait d'un void et tu descends sur un entier signé. Et tu cast, et tu cast et tu cast.
Image utilisateur
 
Publicité # Posté le 04/04/2008 à 23:36:20

Hors ligne JaKhris # Posté le 04/04/2008 à 23:41:13
Floccinaucinihilipilification
Avatar

Études : E-art sup

Et bien il te faut ceci :
deux chiffres, un slash, deux chiffres, un slash et quatres chiffres.

Ta REGEX là, elle vérifie si la chaîne commence et fini par un chiffre entre 0 et 9 et ne dépasse pas deux caractères.

Il te faut donc relire le cours sur les REGEX pour que tu puisse réaliser ce que tu souhaites. ;)

PS : N'oublie pas d'échapper le slash avec un antislash. ;)

Chris
Chronoise: Je fais de la musique...ça t'impressionne? Moi aussi.
 
Hors ligne IgiX # Posté le 04/04/2008 à 23:43:39
Avatar

Études : Epitech Paris

ouai, je sais, il faut que je
re-re-reCode : PHP - Afficher / masquer les numéros de ligne
  1. <?php $i = 0;while($i<= 10000){$i++; echo '-re';}
lise le cours :D

edit:

donc il faut qqch du type:
#^[0-9]{2}\/[0-9]{2}\/[0-9]{4}\/$#

nan?
Édité le 04/04/2008 à 23:47:52 par IgiX

Image utilisateur
$variable = 'le pape'; // le pape en string
Alors Brice, aujourd'hui on va voir la programmation, tu pars bien haut, bien abstrait d'un void et tu descends sur un entier signé. Et tu cast, et tu cast et tu cast.
Image utilisateur
 
Hors ligne Clement_frm # Posté le 04/04/2008 à 23:50:21
Limons les repose-pieds !
Avatar

Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2. preg_match("#^[0-3]?[0-9]/[0-1]?[0-9]/[0-9]{2,4}$#", $ta_variable);

Bon, bien sûr, ça laisse la possibilité d'écrire une date incohérente du genre : 39/15/9999, mais au moins le format est respecté : x/x/xx ou xx/xx/xxxxx ou un mix des deux, ça passe.
Si tu veux que ça soit plus rigide, et qu'on ne puisse écrire que xx/xx/xxxx, alors c'est plutôt cette regex qui sera adaptée :
Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2. preg_match("#^[0-9]{2}/[0-9]{2}/[0-9]{4}$#", $ta_variable);



(HS : pourquoi échapper les slashes ?)

Clément..
 
Hors ligne IgiX # Posté le 04/04/2008 à 23:54:43
Avatar

Études : Epitech Paris

euh, sais pas les \/ ^^

mais dinc si je met
Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2. preg_match("#^[1-31]{1}/[0-12]{1}/[1950-2008]{1}$#", $ta_variable);


cela fonctionnerais?

Image utilisateur
$variable = 'le pape'; // le pape en string
Alors Brice, aujourd'hui on va voir la programmation, tu pars bien haut, bien abstrait d'un void et tu descends sur un entier signé. Et tu cast, et tu cast et tu cast.
Image utilisateur
 
Hors ligne Clement_frm # Posté le 05/04/2008 à 00:00:11
Limons les repose-pieds !
Avatar

Citation : IgiX
mais dinc si je met
Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2. preg_match("#^[1-31]{1}/[0-12]{1}/[1950-2008]{1}$#", $ta_variable);

cela fonctionnerais?
Non !
La classe [1-31], pour ne prendre qu'elle en exemple, signifie littéralement :
«Tous les chiffres compris entre 1 et 3 ou le chiffre 1».
Et il en va de même avec [0-12] et [1950-2008], qui veulent dire :
- pour la première : les chiffres de 0 à 1 ainsi que le 2
- pour la seconde : le chiffre 1, le 9, le 5, les chiffres 0 à 2, le 0, encore le 0 (ça ne gêre pas PHP, tu peux lui dire de vérifier mille fois s'il y a le 0, il le fera), et le chiffre 8.

Ça ne fonctionne donc pas...

Clément..
 
Hors ligne IgiX # Posté le 05/04/2008 à 00:04:45
Avatar

Études : Epitech Paris

merci!a
Donc il serai mieu de mettre en variable mes valeur jj mm et aaaa pour faire un test type if($jj <= 0 OR $jj => 13){...}

mais, comment mettre ces valeurs en variable?


edit

ou sinon Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2. preg_match("#^(0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31){1}/(0|1|2|3|4|5|6|7|8|9|10|11|12){1}/(1950|1951|1952|1953|1954|1955|1956|1957|1958|1959|1960|1961|1962|1963|1964|1965|1966|1967|1968|1969|1970|1971|1972|1973|1974|1975|1976|1977|1978|1979|1980|1981|1982|1983|1984|1985|1986|1987|1988|1989|1990|1991|1992|1993|1994|1995|1996|1997|1998|1999|2000|2001|2002|2003|2004|2005|2006|2007|2008|2009|2010|2011|2012|2013|2014|2015|2016|2017|2018|2019|2020){1}$#", $ta_variable);

mais bon :p
Édité le 05/04/2008 à 00:15:47 par IgiX

Image utilisateur
$variable = 'le pape'; // le pape en string
Alors Brice, aujourd'hui on va voir la programmation, tu pars bien haut, bien abstrait d'un void et tu descends sur un entier signé. Et tu cast, et tu cast et tu cast.
Image utilisateur
 
Hors ligne Clement_frm # Posté le 05/04/2008 à 00:26:43
Limons les repose-pieds !
Avatar

Bah, passons à autre chose : checkdate()

Je pense que ça va te simplifier la vie.
D'abord tu vérifies que la date est valide grâce à checkdate(), puis tu utilises ma première regex pour vérifier si le format est le bon (enfin...tu peux le faire en sens inverse, on s'en fout ^^ )

Il faudra juste te pencher un peu sur explode() (ce n'est qu'une piste de réflexion, il y en a d'autres) pour récupérer les valeurs séparément, afin de les passer à checkdate() dans le bon ordre :D

Clément..
 
Hors ligne IgiX # Posté le 05/04/2008 à 00:28:10
Avatar

Études : Epitech Paris

bah, fais le moi alors :D

Image utilisateur
$variable = 'le pape'; // le pape en string
Alors Brice, aujourd'hui on va voir la programmation, tu pars bien haut, bien abstrait d'un void et tu descends sur un entier signé. Et tu cast, et tu cast et tu cast.
Image utilisateur
 
Hors ligne saturn1 # Posté le 05/04/2008 à 00:33:37
Avatar

rooo la feignasse
Tiens pour explode c'est pas compliqué
$temps = explode('/', $date);
$temps[0] c'est les jours
$temps[1] c'est les mois...
etc ;)
Édité le 05/04/2008 à 00:36:28 par saturn1
Hors ligne IgiX # Posté le 05/04/2008 à 00:35:51
Avatar

Études : Epitech Paris

c'est bon j'ai fait tout seul!

Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2. $date = '01/02/1990';
  3. if(preg_match("#^[0-9]{2}/[0-9]{2}/[0-9]{4}$#", $date))
  4. {
  5.         $arr_date = explode("/", $date);
  6.         if(checkdate($arr_date['1'], $arr_date['0'], $arr_date['2']))
  7.         echo 'ok';
  8.        
  9.         else
  10.         echo 'Erreur';
  11. }
  12. else
  13. {
  14.         echo 'Erreur';
  15. }
  16. ?>


voilà pour ceux qui sont dans le meme cas que moi




EDIT satunr voulant jouer le pro du php : Edité il y a 9 min alors que mon msg a été Posté il y a 10 min
Édité le 05/04/2008 à 00:47:27 par IgiX

Image utilisateur
$variable = 'le pape'; // le pape en string
Alors Brice, aujourd'hui on va voir la programmation, tu pars bien haut, bien abstrait d'un void et tu descends sur un entier signé. Et tu cast, et tu cast et tu cast.
Image utilisateur
 
Hors ligne arcanis # Posté le 19/10/2011 à 10:58:11
Tataye-yoyo !
Avatar

Études : Epitech Paris

Citation : IgiX
merci!a
Donc il serai mieu de mettre en variable mes valeur jj mm et aaaa pour faire un test type if($jj <= 0 OR $jj => 13){...}

mais, comment mettre ces valeurs en variable?


edit

ou sinon Code : PHP
1
2
<?php
preg_match("#^(0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31){1}/(0|1|2|3|4|5|6|7|8|9|10|11|12){1}/(1950|1951|1952|1953|1954|1955|1956|1957|1958|1959|1960|1961|1962|1963|1964|1965|1966|1967|1968|1969|1970|1971|1972|1973|1974|1975|1976|1977|1978|1979|1980|1981|1982|1983|1984|1985|1986|1987|1988|1989|1990|1991|1992|1993|1994|1995|1996|1997|1998|1999|2000|2001|2002|2003|2004|2005|2006|2007|2008|2009|2010|2011|2012|2013|2014|2015|2016|2017|2018|2019|2020){1}$#", $ta_variable);

mais bon :p


Quitte à vérifier les jours et mois, tu as plus simple :

(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[0-2])/[0-9]{4}

Pour les ans, je n'ai pas intégré de vérification compte tenu du fait qu'une regex est censée vérifier la validité syntaxique d'une entrée, pas sa cohérence. Déjà le check des jours et mois est peut-être pas dans l'esprit du truc, même si facilement faisable.

Après, checkdate() est effectivement fait pour, donc ...

[edit] Je vous jure que je ne sais pas ce qu'il s'est passé. J'ai vu ce topic en tant que dernier post du forum. Wtf.
Édité le 19/10/2011 à 11:34:20 par arcanis

Il est allé là où personne n'était allé auparavant (dans la grande réserve).
Il en revient aujourd'hui pour s'assurer que nul ne le suivra...

Des objections?
 

Retour au forum "PHP" ou à la liste des forums

Pour accéder à cette section
Connectez-vous !
connexion_rpx