Come potresti abbinare 12 ore di tempo in un'espressione regolare-- in altre parole corrisponde 12:30 ma non 14:74? Grazie!Come si combina l'ora di 12 ore hh: mm in un'espressione regolare?
risposta
Ti piace questa: ((?:1[0-2]|0\d)\:(?:[0-5]\d))
se si desidera 0 iniziale per l'ora, se non ((?:1[0-2]|\d)\:(?:[0-5]\d))
e ((?:1[0-2]|0?\d)\:(?:[0-5]\d))
fare se non vi interessa.
Ciò imporrebbe uno zero iniziale no? per esempio. Corrisponderebbe a 05:02 ma non a 5:02? – Joe
risolto che: vuoi, non lo fai o non ti interessa :) –
^(?:(?:1?(?:[0-2]))|[1-9]):[0-5][0-9]
Questo è un esempio di un problema in cui "hey lo so, userò le espressioni regolari!" è la soluzione sbagliata. È possibile utilizzare un'espressione regolare per verificare che il formato di input sia costituito da cifre-cifre-cifre-cifre-cifre, quindi utilizzare la logica di programmazione per garantire che i valori rientrino nell'intervallo previsto. Per esempio:
/(\d\d?):(\d\d)/
if ($1 >= 1 && $1 <= 12 && $2 < 60) {
// result is valid 12-hour time
}
Questo è molto più facile da leggere e comprendere che alcuni degli esempi regex offuscati che si vedono in altre risposte qui.
Oppure è un esempio in cui stai compilando qualcosa che richiede espressioni regolari ... – Rodger
Credo che quanto sopra non riesca almeno in un modo, in particolare per quanto riguarda le stringhe come "13:00" (le corrispondenze di Keith "3:00" in quel caso).
Questo dovrebbe gestire il problema così come gli altri allevati.
([01][0-2]|(?<!1)[0-9]):([0-5][0-9])
(0?\d|1[0-2]):([0-5]\d)
che abbinerà tutto, dalle 00:00 fino a 12:59. A proposito, sono 13 ore. Se non si desidera far corrispondere 0:00-00:59, provate questo invece:
([1-9]|1[0-2]):([0-5]\d)
è possibile utilizzare questo uno:
/((?:1[0-2])|(?:0?[0-9])):([0-5][0-9]) ?([ap]m)/
/1 => hour
/2 => minute
/3 => am/pm
le seguenti partite imbottite e non imbottiti ore un orologio di 24 ore (ovvero dalle 00:00 alle 23:59) tra le 00:00 e le 12:59.
(?:(?<!\d)[0-9]|0[0-9]|1[0-2]):[0-5][0-9]
Partite:
- 00:00
- 00:58
- 01:34
- 1:34
- 8:35
- 12:23
- 12:59
Nonmatches:
- 13:00
- 13:23
- 14:45
- 23:59
perché regex?si può fare controllare questo semplice numero intero sarà
$str = "12:74";
list($h , $m) = explode(":",$str);
if (($h <=12 && $h >=0 ) && ($m <=59 && $m >=0)) {
print "Time Ok.";
}else{
print "Time not ok";
}
Sì, ma se '$ str' è uguale a '" foozah "', interromperà il tuo script (dato che non esiste un indice 1). Inoltre, se '$ str' è uguale a' "foo: zah" ', lo script dirà che * è * un tempo valido, ma mi piace pensare che non sia così. –
^(00|0[0-9]|1[012]):[0-5][0-9] ?((a|p)m|(A|P)M)$
^
- l'inizio della stringa.
(00|0[0-9]|1[012])
- qualsiasi numero a due cifre fino a 12. Richiede due cifre.
:
- Partita di due punti
[0-5][0-9]
- Partita di qualsiasi numero a due cifre da 00 a 59.
?
- Partita di uno spazio zero o una volta.
((a|p)m|(A|P)M)
- Match am o pm, senza distinzione tra maiuscole e minuscole.
$
- Abbina la fine della stringa.
Ecco uno schema di 12 ore con convalida AM e PM.
TIME12HOURSAMPM_PATTERN = "^(?:(?<!\\d)[0-9]|0[0-9]|1[0-2]):[0-5][0-9] ?((a|p)m|(A|P)M)$";
ho provato questo: (1 [0-9]?): ([0-9] {2}), ma che corrisponde 14:74! –
Le ore zero sono riempite? – MyItchyChin