Domanda

sto usando preg_match PHP per ottenere un nome sottogruppi da una stringa. Sto analizzando le stringhe di data / ora generati dagli utenti in token data / ora ben formattati-.

Ecco la mia espressione regolare

~(?P<month>\d?\d)(/|-)(?P<day>\d?\d)(/|-)(?P<year>\d\d\d?\d?) +(?P<time>[\d: +((A|a)|(P|p))(M|m)]+)~i

E analizza correttamente le date come

01-17-10 09:30 pm
2/1/2010 06:19am

nelle loro parti costituenti. Tuttavia, accetta 02/11/2010 06:19, con nessuna stringa am / pm, che mi piacerebbe che non fare. Che cosa sto facendo di sbagliato?

È stato utile?

Soluzione

Si sta utilizzando la classe [\d: +((A|a)|(P|p))(M|m)] carattere per la vostra espressione tempo. Questo insieme di caratteri descrive solo carattere e non una sequenza con un modello definito.

Prova (?P<time>\d\d?:\d\d *[ap]m) invece:

~(?P<month>\d\d?)(/|-)(?P<day>\d\d?)(/|-)(?P<year>\d\d\d?\d?) +(?P<time>\d\d?:\d\d *[ap]m)~i
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top