Bienvenue sur le site des Expressions Régulières Icone page d'accueil - Les expressions régulières php Accueil   Icone articles sur les expressions régulières en php Articles d'Expreg - Billets de Fred   Icone nos regex - Les expressions régulières php Les regex d'Expreg Icone mail - Les expressions régulières php



 1) Vérifie la validité d'une date  
les regex php d'expreg.com
posté par Yves Maistriaux (ID : 22)

On vérifie dans une chaine et on accepte les dates en français sous cette forme :
03/05/2003
03/05/2003 14:58
03/05/2003 14:58:59

Pour la date en anglais, on inverse la première partie de la regex
pour obtenir MM/DD/YYYY
On peut encore créer des masques supplémentaires pour réaliser contrôler sur d'autres formes.


<?php
date
="03/05/2003 14:58:27"

if(!
preg_match('`^(((0[1-9])|(1\d)|(2\d)|(3[0-1]))\/((0[1-9])|(1[0-2]))\/(\d{4})(((([[:space:]]?)(([0-1][0-9])|([2][0-3]))(:[0-5][0-9]))((:[0-5][0-9])?))?))$`',$date1))

echo 
'pas bon'

else 

echo 
'la date est '.$date1


?>



 2) Formater une date (V1)  
les regex php d'expreg.com
posté par Yves Maistriaux (ID : 27)

Deux fonctions, ereg et preg_match, pour un résultat identique.
De nouveau, une regex n'est pas forcément nécessaire pour obtenir le résultat voulu.
Une version avec substr est fournie en complément d'information.

<?php
//--- avec ereg ---//

$date="2003-05-20";  
ereg ("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})"$date$regs);  
echo 
"$regs[3]/$regs[2]/$regs[1]"

// avec preg_match maintenant ---// 

$date="2003-05-20";  
preg_match ('`(\d{4})-(\d{1,2})-(\d{1,2})`'$date$out);  
echo 
"$out[3]/$out[2]/$out[1]";

//--- pour info le même résultat avec substr

$date="2003-05-20"
$an=substr($date,0,4); 
$mois=substr($date,5,2); 
$jour=substr($date,8,2); 
echo 
$jour.'/'.$mois.'/'.$an

?>



 3) Et encore un formatage de date...  
les regex php d'expreg.com
posté par Yves Maistriaux (ID : 50)

Une autre approche avec preg_replace en utilisant le délimiteur de classe \d (chiffres uniquement)

<?php
$madate
="2003-06-19";
$motif='`(\d{4})-(\d{1,2})-(\d{1,2})`';
$afficher='$3-$2-$1';
echo 
preg_replace($motif,$afficher,$madate);

// pour info, sans regex avec explode

$madate=explode('-',$madate);
echo 
$madate[2].'-'.$madate[1].'-'.$madate[0];
?>



 4) Fonction pour une date en français...  
les regex php d'expreg.com
posté par Yves Maistriaux (ID : 53)

Un autre regex de formatage de date en français avec utilisation d'une fonction, d'un tableau, de substr...

<?php
$date
="2003-09-08";

function 
date_francais($date){
preg_match ('`^(\d{4})-(\d{2})-(\d{2})(.*)$`'$date$out); 
if(
$out[2]<10){$out[2]=substr($out[2],1,1);}
$i=$out[2];
$mois = array('','janvier''fevrier''mars''avril''mai','juin','juillet''aout''septembre''octobre','novembre''decembre');
return 
$out[3].' '.$mois[$i].' '.$out[1].'  '.$out[4];
}
echo 
'Fonction date en français : Nous sommes le ',date_francais($date);
?>



 5) Formater une date  
les regex php d'expreg.com
posté par Frédéric Bouchery (ID : 28)

Dans les expressions pour formater une date, j'utilise ereg_replace.
Pour info, une solution est aussi donnée avec explode.

<?php
//--- avec ereg_replace ---//
$date='2003-05-20'
echo 
ereg_replace'([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})''\\3/\\2/\\1'$date);

//--- sans regex avec explode ---//

$date='2003-05-20'
  list( 
$année$mois$jour ) = explode'-'$date ); 
  echo 
$jour'/'$mois'/'$année

?>



 6) Saisie de date  
les regex php d'expreg.com
posté par Frédéric Bouchery (ID : 44)

Pour proposer à vos utilisateur une saisie de date sans trop de contraite, voici deux fonctions TRES tolérantes.
On peut commencer par "le" avec la date puis "à" et l'heure.

Si on ne saisie pas le mois et/ou l'année, il fait le rapprochement par rapport à la date du jour.
C'est à dire, si l'on saisie "le 3" alors que nous le 5 novembre, il déduit que l'on parle du 3 décembre.
D'ailleurs, on peut saisir les mois en toutes lettres ...

<?php
function checkDateTime($date)
{
    list(
$day$month$year) = explode(','date('d,m,Y'));
    static 
$month_fr = array(=> 'janvier''f[ée]vrier''mars''avril''mai''juin''juillet''ao[ûu]t''septembre''octobre''novembre''d[ée]cembre');

    if (
preg_match('`^ *(le +)?([0-3]?[0-9])( *[-/ ] *(([0-1]?[0-9])|(' implode('|' $month_fr) . '))( *[-/ ] *([0-9]{1,4}))?)? +([aà] +)?([0-2]?[0-9]) *[:h] *([0-5][0-9]) *$`i'$date$match)) {
        if (empty(
$match[4])) {
            if (
$match[2] > $day$match[4] = $month;
            elseif (
$month == 12$match[4] = 1;
            else 
$match[4] = $month 1;
        } 

        if (!empty(
$match[6])) {
            foreach(
$month_fr as $month_value => $mask) {
                if (
preg_match('`' $mask '`i'$match[4])) {
                    
$match[4] = $month_value;
                    break;
                } 
            } 
        } 

        if (empty(
$match[8])) {
            if (
$match[4] > $month$match[8] = $year;
            else 
$match[8] = $year 1;
        } 
        
print_r($match);
        if (
checkdate($match[4], $match[2], $match[8])) {
            if (
$match[10] < 24 and $match[11] < 60) return $match[8] . '-' $match[4] . '-' $match[2] . ' ' $match[10] . ':' $match[11] . ':00';
        } 
    } 
    return 
false;


function 
checkDateOnly($date)
{
    list(
$day$month$year) = explode(','date('d,m,Y'));
    static 
$month_fr = array(=> 'janvier''f[ée]vrier''mars''avril''mai''juin''juillet''ao[ûu]t''septembre''octobre''novembre''d[ée]cembre');

    if (
preg_match('`^ *(le +)?([0-3]?[0-9])( *[-/ ] *(([0-1]?[0-9])|(' implode('|' $month_fr) . '))( *[-/ ] *([0-9]{1,4}))?)? *$`i'$date$match)) {
        if (empty(
$match[4])) {
            if (
$match[2] > $day$match[4] = $month;
            elseif (
$month == 12$match[4] = 1;
            else 
$match[4] = $month 1;
        } 

        if (!empty(
$match[6])) {
            foreach(
$month_fr as $month_value => $mask) {
                if (
preg_match('`' $mask '`i'$match[4])) {
                    
$match[4] = $month_value;
                    break;
                } 
            } 
        } 

        if (empty(
$match[8])) {
            if (
$match[4] > $month$match[8] = $year;
            else 
$match[8] = $year 1;
        } 
        
print_r($match);
        if (
checkdate($match[4], $match[2], $match[8])) {
            return 
$match[8] . '-' $match[4] . '-' $match[2];
        } 
    } 
    return 
false;
}

?>



 7) Date MySQL en francais  
les regex php d'expreg.com
posté par Fabrice Lezoray (ID : 17)

Cette expression regulière vous permettra de fomater une date venant de MySQL (ou autre) dans un format francais.

La date d'entrée peut être soit un Timestamp UNIX, soit une date au format DATE de MySQL (YYYY-MM-DD) ou soit une date au format DATETIME de MySQL (YYYY-MM-DD HH-MM-SS).

La date de sortie est au format francais DD-MM-YYYY (HH-MM-SS).

<?php

// Format datetime
$date ='2002-12-25 16:00:00';

// Format date
// $date = '2003-12-25';

// Un timestamp
// $date = time();

function callback_date($match) {
    
    if(
is_numeric($match[1]))
    return 
date('d-m-Y H:i:s'$match[1]);
    else
    return 
$match[4] . '-' $match[3] . '-' $match[2] . $match[5];
    
}

echo 
preg_replace_callback('`^(\d+|(\d{4})-(\d{2})-(\d{2})(.*))$`''callback_date'$date);

?> 




European Cards - Hosting-Ec Validation W3C European Cards - Hosting-Ec Validation W3C © 2003 - 2008 www.expreg.com - Toutes reproductions interdites sans l'autorisation écrite des auteurs
:::::::::: Design an Hosting by : European Cards Sprl ::::::::::