par
@rthur » 07 août 2017, 11:01
Bonjour,
Tu peux faire cela avec un tableau qui contient les mois et une expression régulière pour extraire les centaines :
<?php
echo donne_date('1030');
function donne_date(int $date_mmdd) {
$mois_fr = array('', 'janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet',
'août', 'septembre', 'octobre', 'novembre', 'décembre');
if (!preg_match('`^([0-9]{1,2})([0-9]{2})$`', $date_mmdd, $matches)) return false;
// $matches[1] contient le jour et $matches[2] contient le mois
return intval($matches[2]).' '.$mois_fr[intval($matches[1])];
}
La partie un peu complexe est l'expression régulière :
veut dire 1 ou 2 chiffres de 0 à 9 (car tes mois peuvent être notés 1 pour janvier et pas forcément 01, notamment ça sera le cas si tu les stockes au format INT en MySQL, le premier 0 va disparaitre car inutile pour un entier).
Et on met cela entre parenthèses pour récupérer cette info dans $matches.
idem que précédemment, sauf qu'on veut récupérer cette fois ci exactement 2 chiffres, les unités et les dizaines.
Le caractère ^ symbolise le début de ta variable et $ la fin.
Cela veut donc dire qu'il ne doit pas y avoir autre chose que 3 ou 4 chiffres dans ta variable.
Si il n'y en a que 2 ou 5 ou qu'il y a des lettres, alors la fonction doit renvoyer false car ce n'est pas normal.
Bonjour,
Tu peux faire cela avec un tableau qui contient les mois et une expression régulière pour extraire les centaines :
[php]<?php
echo donne_date('1030');
function donne_date(int $date_mmdd) {
$mois_fr = array('', 'janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet',
'août', 'septembre', 'octobre', 'novembre', 'décembre');
if (!preg_match('`^([0-9]{1,2})([0-9]{2})$`', $date_mmdd, $matches)) return false;
// $matches[1] contient le jour et $matches[2] contient le mois
return intval($matches[2]).' '.$mois_fr[intval($matches[1])];
}
[/php]
La partie un peu complexe est l'expression régulière :
[code]^([0-9]{1,2})([0-9]{2})$[/code]
[code][0-9]{1,2}[/code]veut dire 1 ou 2 chiffres de 0 à 9 (car tes mois peuvent être notés 1 pour janvier et pas forcément 01, notamment ça sera le cas si tu les stockes au format INT en MySQL, le premier 0 va disparaitre car inutile pour un entier).
Et on met cela entre parenthèses pour récupérer cette info dans $matches.
[code][0-9]{2}[/code]idem que précédemment, sauf qu'on veut récupérer cette fois ci exactement 2 chiffres, les unités et les dizaines.
[code]^...$[/code]Le caractère ^ symbolise le début de ta variable et $ la fin.
Cela veut donc dire qu'il ne doit pas y avoir autre chose que 3 ou 4 chiffres dans ta variable.
Si il n'y en a que 2 ou 5 ou qu'il y a des lettres, alors la fonction doit renvoyer false car ce n'est pas normal.