2010-10-20 7 views
1

J'utilise regex ci-dessous pour valider la date en format dd/mm/yyyy en php:PHP: validation de temps RegEx?

preg_match("/([0-9]{2})\/([0-9]{2})\/([0-9]{4})/", $e_startdate, $matches) 

Mais quel sera le regex pour valider le temps dans le format 10:20 PM ou AM. Je veux une regex qui va valider le format suivant pour moi.

<number><number><colon><number><number><space><AM or PM> 

Merci

Répondre

3

Les points suivants doivent validez le format demandé:

preg_match("/(\d{2}):(\d{2}) (AM|PM)/", $e_startdate, $matches); 

Remarque que ce n'est pas nécessairement un moment valide. Vous pourrait entrer des choses comme 32:62 AM. Vous avez besoin de quelque chose comme ça pour la validation du temps:

preg_match("/(0?\d|1[0-2]):(0\d|[0-5]\d) (AM|PM)/i", $e_startdate, $matches); 

esprit pour correspondre à la chose sensible à la casse (comme je l'ai fait dans le second exemple). Sinon, les minuscules am, pm, etc. ne fonctionneront pas.

+0

Je veux accepter l'heure en format 12 heures seulement, donc votre regex '/ (0? \ D | 11 | 12) :(0 \ d | [0-5] \ d) (AM | PM)/i' ce n'acceptera que le format 12 heures? – Prashant

+0

@Prashant: C'est vrai. Cela correspond au format 12 heures seulement. – jwueller

+0

@elusive: après l'avoir fait correspondre avec preg_match ce que j'obtiendrai dans la variable '$ matches'? J'ai besoin de HH MM et AM | PM comme élément de tableau séparé dans la variable '$ matches'? – Prashant

5

Vous pouvez utiliser le regex:

(0[0-9]|1[0-2]):[0-5][0-9] [AP]M 
+0

Le précédent 0 devrait être facultative pour accepter les temps au format '1h23 'et cela accepterait '00: 00 AM' ou ' 00h49 'qui sont illégales. '(0 [1-9] | [1-9] | 1 [0-2]): [0-5] [0-9] [AP] M' devrait fonctionner pour ceux-là. –

+0

Je ne reçois pas cette partie '(0 [0-9] | 1 [0-2])' ce que cela signifie, si vous pouvez expliquer. Merci! – Prashant

+0

@Prashant: Cela signifie '0 [0-9]' ou '1 [0-2]'. '0 [0-9]' signifie '0' suivi de n'importe quel chiffre. et '1 [0-2]' signifie '1' suivi de' 0 ou 1 ou 2'. – codaddict

1

/\ d {2}: \ d {2} (AM | PM)/

0

J'ai commencé avec la réponse d'elusive, mais j'avais besoin d'un peu plus de flexibilité. Celui-ci fait le procès-verbal en option, ainsi que l'espace avant AM/PM

/(0?\d|1[0-2])(:(0\d|[0-5]\d))?[ ]?(A|P)M/i 
2

Expression régulière:

(([0-1][0-9])|([2][0-3])):([0-5][0-9]):([0-5][0-9]) 

temps en format Valide du temps MySQL. 24 heures séparées par deux points: minutes: secondes hh: mm: ss

Correspondances: 09:30:00 | 17:45:20 | 23:59:59

non-Matches: 24:00:00

+0

La question portait sur le format de l'heure sur 12 heures ... – Sven

+0

/([0-1] [0-9] | 2 [0-3]): [0-5] [0-9]: [0-5 ] [0-9]/légère simplification – zzapper