Checkdate: 08 => 8 en PHP
Merci Sabotage....
Et (je vais chercher) je fais quoi maintenant....
Remplacer les blancs par "0" uniquement quand la zone à une longueur == 1 ??
Ou qlqchose du genre ?
Merci :lol:
Checkdate: 08 => 8 en PHP
Etourderie peut être, fatigué sans doute....
Voici mon code:
Code:
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 32
| function validate()
{ $date = preg_replace('#[^0-9]#', '', $_POST['date']) ; // On débarasse la saisie d'éventuels délimiteurs.....
switch(strlen($date)) // Longueur de la saisie
{ case 6 : $format = '%2s%2s%2s' ; // Format JJMMYY
break ;
case 7 : $format = '%2s%3s%2s' ; // Format JJMMMYY
break ;
case 8 : $format = '%2s%2s%4s' ;// Format JJMMYYYY
break ;
case 9 : $format = '%2s%3s%4s' ;// Format JJMMMYYYY
break ;
}
list($this->dd, $this->mon, $this->yy) = sscanf($date, $format) ;
var_dump($this->dd) ;
var_dump($this->mon) ;
var_dump($this->yy) ;
if ( is_string($this->mon) )
$this->mm = array_search($this->mon, $this->month);
else
if ( is_int($this->mon) )
$this->mm = $this->mon ;
else
throw new Exception("class[DATE] - Bad char in [".$date."] !") ;
return( checkdate($this->mm , $this->dd , $this->yy) ? OK : DATE) ;
} |
Dans celui-ci, je ne vois pas comment m'assurer que j'ai 7 ou 07 ou "07" ....
Merci !
Checkdate: 08 => 8 en PHP
Voici la solution que j'ai trouvée, il y a peut être mieux...
Code:
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 32 33 34 35 36 37 38 39 40 41 42 43
| function fill($str,$len)
{ for ($i = 0 ; (strlen($str) < $len) ; $i++)
$str = "0" . $str ;
var_dump($str) ;
return($str) ;
}
/**
* validate
* ========
*/
function validate()
{ $date = preg_replace('#[^0-9]#', '', $_POST['date']) ; // On débarasse la saisie d'éventuels délimiteurs.....
switch(strlen($date)) // Longueur de la saisie
{ case 6 : $format = '%2s%2s%2s' ; // Format JJMMYY
break ;
case 7 : $format = '%2s%3s%2s' ; // Format JJMMMYY
break ;
case 8 : $format = '%2s%2s%4s' ;// Format JJMMYYYY
break ;
case 9 : $format = '%2s%3s%4s' ;// Format JJMMMYYYY
break ;
}
list($this->dd, $this->mon, $this->yy) = sscanf($date, $format) ;
var_dump($this->dd) ;
var_dump($this->mon) ;
var_dump($this->yy) ;
/*
if ( is_string($this->mon) )
$this->mm = array_search($this->mon, $this->month);
else
if ( is_int($this->mon) )
$this->mm = $this->mon ;
else
throw new Exception("class[DATE] - Bad char in [".$date."] !") ;
*/
$this->mm = $this->mon ;
return( checkdate($this->fill($this->mm,2) , $this->fill($this->dd,2) , $this->fill($this->yy,4) ) ? OK : DATE) ;
} |
Et maintenant ma date est validée correctement mais je dois encore faire des ajustements puisque j'ai du commmenter le code dans le cas ou le mois est en caractères, je n'ai qu'à déplacer ce code.
Merci à tous. :D:D
Checkdate: 08 => 8 en PHP
Cela fonctionne mais pas dans le cas ou on code 08-jul-1954 .....
Voici mon code:
Code:
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| /**
* fill
* ====
*/
function fill($str,$len)
{ for ($i = 0 ; (strlen($str) < $len) ; $i++)
$str = "0" . $str ;
var_dump($str) ;
return($str) ;
}
/**
* validate
* ========
*/
function validate()
{ var_dump($date = $_POST['date']) ;
$date = preg_replace('#[^0-9]#', '', $date) ; // On débarasse la saisie d'éventuels délimiteurs.....
var_dump($date) ;
switch(strlen($date)) // Longueur de la saisie
{ case 6 : $format = '%2s%2s%2s' ; // Format JJMMYY
list($this->dd, $this->mm, $this->yy) = sscanf($date, $format) ;
break ;
case 7 : $format = '%2s%3s%2s' ; // Format JJMMMYY
list($this->dd, $this->mon, $this->yy) = sscanf($date, $format) ;
$this->mm = array_search($this->mon, $this->month);
break ;
case 8 : $format = '%2s%2s%4s' ;// Format JJMMYYYY
list($this->dd, $this->mn, $this->yy) = sscanf($date, $format) ;
break ;
case 9 : $format = '%2s%3s%4s' ;// Format JJMMMYYYY
list($this->dd, $this->mon, $this->yy) = sscanf($date, $format) ;
$this->mm = array_search($this->mon, $this->month);
break ;
}
var_dump($this->dd) ;
var_dump($this->mn) ;
var_dump($this->yy) ;
return( checkdate($this->fill($this->mm,2) , $this->fill($this->dd,2) , $this->fill($this->yy,4) ) ? OK : DATE) ;
} |
avec le tableau dans le cas d'un mois en caractères:
Code:
1 2 3 4
| private $month = array ( "JAN" => "01" , "FEV" => "02" , "MAR" => "03" , "AVR" => "04" ,
"MAI" => "05" , "JUI" => "06" , "JUL" => "07" , "AOU" => "08" ,
"SEP" => "09" , "OCT" => "10" , "NOV" => "11" , "DEC" => "12"
) ; |
Et j'obtiens à l'écran:
Code:
1 2
|
string(11) "08-jul-1954" string(6) "081954" string(2) "08" NULL string(2) "54" string(2) "00" string(2) "08" string(4) "0054" |
Ce qui est de toute évidence faux !
Dans ce cas (mois en caractères) le preg_replace ne convient pas !!!
Merci à tous, cela fait déjà bcp pour ajd'hui....
Checkdate: 08 => 8 en PHP
Oui, je voulais effectivement faire 3 champs pour n'avoir qu'un seul format mais comme je ne veux pas de Jscript dans mon site, je ne pouvais pas faire des autoskip de champ à champ et cela m'a dissuadé dans un 1er temps de prendre cette solution.
Mais je crois que je vais revenir à cette alternative.
Merci et bonne fin de WE :D