Probleme d'une simple expression reguliere [RESOLU]

Probleme d'une simple expression reguliere [RESOLU] - PHP - Programmation

Marsh Posté le 29-09-2004 à 15:35:10    

J'ai fait un script pour retourner l'age du client à partir d'une date de naissance en ("yyyy-mm-dd" ) ou d'un timestamp.
 
La regexp pour verifier que la date ai un bon format fonctionne parfaitement, pourtant pour verifier que mon timestamp fait bien 9 chiffres, le truc bug, et si je met un timestamp de x chiffre ca merdera mais ca mettra pas l'erreur.
 
La source peu etre vue ici : http://if-faw.com/meltingArt/functions/returnAge.php
 
Merci de votre aide, je suis sur que c'est rien du tout, pourtant quand j'ai tester dans REtester ca met bien un erreure


Message édité par Profil supprimé le 29-09-2004 à 15:59:45
Reply

Marsh Posté le 29-09-2004 à 15:35:10   

Reply

Marsh Posté le 29-09-2004 à 15:41:56    

Code :
  1. elseif (!preg_match("/([0-9]{4})-([0-9]{2})-([0-9]{2})/", $dateNaiss))


 
?


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 29-09-2004 à 15:43:13    

Pourquoi ne pas utiliser simplement \d{9} ?

Reply

Marsh Posté le 29-09-2004 à 15:46:38    

simogeo a écrit :

Code :
  1. elseif (!preg_match("/([0-9]{4})-([0-9]{2})-([0-9]{2})/", $dateNaiss))


 
?

??

Reply

Marsh Posté le 29-09-2004 à 15:47:07    

Voici une source qui fonctionne parfaitement essaye de comparer au tient :)
 

Code :
  1. function age($date)
  2. {
  3.     if (ereg("([0-9]{4})([0-9]{2})([0-9]{2})", $date, $regs))
  4.     {
  5.         $age = floor((date("Ymd" )-intval($date))/10000);
  6.         if ($age < 0)
  7.         {
  8.             echo "<b>Logic error:</b> Cette date de naissance est futuriste.<br />\n";
  9.             return FALSE;
  10.         }
  11.         return $age." an".($age == 1 ? "" : "s" );
  12.     }
  13.     echo "<b>Parse error:</b> Argument incorrect pour age(). Attendu : 'AAAAMMJJ'<br />\n";
  14.     return FALSE;
  15. }

Reply

Marsh Posté le 29-09-2004 à 15:47:47    

kalex a écrit :

Pourquoi ne pas utiliser simplement \d{9} ?

le probleme n'est pas le [0-9], ben que j'ai maintenant mis \d, mais le {9} qui ne fonctionne pas

Reply

Marsh Posté le 29-09-2004 à 15:48:29    

masenko a écrit :

Voici une source qui fonctionne parfaitement essaye de comparer au tient :)
 

Code :
  1. function age($date)
  2. {
  3.     if (ereg("([0-9]{4})([0-9]{2})([0-9]{2})", $date, $regs))
  4.     {
  5.         $age = floor((date("Ymd" )-intval($date))/10000);
  6.         if ($age < 0)
  7.         {
  8.             echo "<b>Logic error:</b> Cette date de naissance est futuriste.<br />\n";
  9.             return FALSE;
  10.         }
  11.         return $age." an".($age == 1 ? "" : "s" );
  12.     }
  13.     echo "<b>Parse error:</b> Argument incorrect pour age(). Attendu : 'AAAAMMJJ'<br />\n";
  14.     return FALSE;
  15. }



cette partie fonctionne chez moi :jap: ( a ma sauce j'entend)
 
le probleme vient du timestamp

Reply

Marsh Posté le 29-09-2004 à 15:51:54    


 
 :sweat:  pardon ...
 
et sans les parentheses ?
 

Code :
  1. if (preg_match("/[0-9]{9}/", $dateNaiss))
  2.         $dateNaiss = date("Y-m-d", $dateNaiss);



Message édité par simogeo le 29-09-2004 à 15:52:14

---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 29-09-2004 à 15:52:30    

simogeo a écrit :

:sweat:  pardon ...
 
et sans les parentheses ?
 

Code :
  1. if (preg_match("/[0-9]{9}/", $dateNaiss))
  2.         $dateNaiss = date("Y-m-d", $dateNaiss);



pareil :jap:

Reply

Marsh Posté le 29-09-2004 à 15:53:29    

chacal_one333 a écrit :

le probleme n'est pas le [0-9], ben que j'ai maintenant mis \d, mais le {9} qui ne fonctionne pas

J'ai compris, il faut attacher le masque :

Code :
  1. preg_match("/^\d{9}$/", $dateNaiss)

Reply

Marsh Posté le 29-09-2004 à 15:53:29   

Reply

Marsh Posté le 29-09-2004 à 15:55:14    

Code :
  1. if(is_numeric($dateNaiss)) $dateNaiss = date("Y-m-d", $dateNaiss);


 
:o .. moins gourmand qu'un regex [:dawa]


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 29-09-2004 à 15:57:58    

parfait :)
 
En gros s'il y a des chiffres apres le timestamp, il le considere en dehors de la regexp, il trouve un match mais n'inclue pas les chiffre apres les 9 dedant, donc il faut delimiter :jap:
 
astucieux :D

Reply

Marsh Posté le 29-09-2004 à 15:58:13    

Faut pas mettre les - dans Y-m-d faut mettre Ymd
 
nan rien... :)


Message édité par Masenko le 29-09-2004 à 15:58:38
Reply

Marsh Posté le 29-09-2004 à 15:59:22    

masenko a écrit :

Faut pas mettre les - dans Y-m-d faut mettre Ymd
 
nan rien... :)

ca me fait un motif d'explode :D

Reply

Marsh Posté le 29-09-2004 à 16:03:46    

j ai rarement vu un sujet ou y avait autant de réponse en aussi peu de temps alors si quelqun pouvais m aider ici ce serait cool :)
http://forum.hardware.fr/hardwaref [...] 8125-1.htm

Reply

Marsh Posté le 29-09-2004 à 16:06:07    

Moi j'ai un autre défi.
Supposons un formulaire avec un champ texte ou l'utilisteur peut écrire ce qu'il veut. J'aimerai que si il affiche <h1>salut</h1> et que l'on affiche ce texte, ce que soit écrit salut sans que le html soit pris en compte. J'ai fais une expression régulière qui regarde si <QQCH>texte</QQCH> existe, c'est bon mais j'aimerai que si ça existe, pouvoir sortir le contenu de la balise. Une idée ?

Reply

Marsh Posté le 29-09-2004 à 16:09:04    

si t'as pas besoin de retenirle nom du tag --> strip_tags() roulaize :D


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 29-09-2004 à 16:09:37    

ca part en topic "help sur les regexp :D"

Reply

Marsh Posté le 29-09-2004 à 16:14:54    

simogeo a écrit :

si t'as pas besoin de retenirle nom du tag --> strip_tags() roulaize :D

Oui sinon, voici une base :

'/<(h1)>(.*?)<\/\\1>/'

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed