Ceci correspond exactement à votre spécification, ce qui permet n'importe quoi comme une valeur mensuelle.
Comme vous pouvez le voir, j'ai regroupé chaque partie de la date pour que vous puissiez facilement la reformater.
Si la chaîne ne correspond pas, m $ sera 0.
linux-t77m:/home/vinko$ more preg.php
<?php
$d = "10 Jul 2010 15:00";
$m = preg_match("/(\d{2})\s([a-z]{3})\s(\d{4})\s(\d{2}):(\d{2})/i",$d,&$matches);
print_r($matches);
?>
linux-t77m:/home/vinko$ php preg.php
Array
(
[0] => 10 Jul 2010 15:00
[1] => 10
[2] => Jul
[3] => 2010
[4] => 15
[5] => 00
)
Pour vous assurer que avez des mois valides, vous pouvez utiliser à la place cette regexp
$m = preg_match("/(\d{2})\s(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\s(\d{4})\s(\d{2}):(\d{2})/i",$d,&$matches);
Mais .. maintenant vous ne faites que correspondre aux mois anglais.
Cela va bientôt devenir difficile. Je vous suggère fortement d'utiliser un datetime handling library et de le laisser gérer tous ces problèmes.
ressemble à http://stackoverflow.com/questions/2811535/php-datetime-regex – SteveCav
Pas tout à fait. J'ai seulement besoin de vérifier que le champ est dans ce format particulier. Si c'est le cas, je le convertis en un format compatible MYSQL. Si ce n'est pas le cas, une erreur s'affiche pour l'utilisateur. – GSTAR