2010-07-25 6 views
0

je besoin d'un PHP 5 expression régulière pour la date/format de l'heure suivante:Expression régulière nécessaire à la date/heure validation

10 Jul 2010 15:00

(2 chiffres espace 3 caractères espace 4 chiffres espace 2 chiffres côlon 2 chiffres)

de cas de caractère n'a pas d'importance, et l'entrée est uniquement autorisé az, 0-9, de l'espace, du côlon

Merci d'avance.

+0

ressemble à http://stackoverflow.com/questions/2811535/php-datetime-regex – SteveCav

+0

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

Répondre

3

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.

+0

Bon maté. C'est en fait un très bon point - comment puis-je également m'assurer que le mois est un nom de mois valide à 3 caractères? – GSTAR

+0

@GSTAR: Si une chaîne correspond à l'expression régulière, vérifiez manuellement le mois par rapport aux douze possibilités. –

+0

Bravo à nouveau. J'utiliserais cette classe datetime mais elle me dit qu'elle n'est activée que dans 5.3, ce que mon hôte ne fournit pas actuellement. Je pense que la solution ci-dessus fonctionnera bien pour moi, je ne pense pas que j'aurais besoin de quoi que ce soit d'autre que les noms des mois anglais de toute façon :) – GSTAR

Questions connexes