2010-05-11 17 views
6

Sto prelevando dati da un feed su cui non ho alcun controllo e ho bisogno di verificare se una stringa che ho ricevuto è valida.Ruby: come verificare se una stringa è valida?

La maggior parte delle volte ho inviato correttamente qualcosa come "2:35" o "15:41" ma altre volte sono cose come "AM" o "PM" (e nessun numero) ... quindi alla fine solo bisogno di ignorare quelli.

Quindi, come posso verificare se i dati sono validi?

risposta

8

È possibile utilizzare Time.parse() e controllare l'eccezione ArgumentError per orari non validi

L'ulteriore vantaggio è che si ha anche il tempo in un formato utilizzabile con cui lavorare se è valido!

+6

Non utilizzare analisi per convalidare! Time.parse ('2: 34-^5') # => 2012-08-14 02:34:00 -0400 – Bob

+5

L'uso di parse per la convalida può causare alcuni orari non validi mancanti, ad esempio: 'Time.parse ('27 : 45 PM ') '=> 2012-12-04 15:45:00 -0500 – tjstankus

7

Non hai esattamente specificato cosa si assume essere un tempo valido (ad esempio se si deve accettare secondi opzionali), quindi ecco una congettura:

data =~ /^([01]?[0-9]|2[0-3])\:[0-5][0-9]$/ 
+0

sebbene Time.parse() con un salvataggio possa funzionare, preferirei la soluzione regex. Le eccezioni in ruby ​​non sono considerate molto veloci, quindi a meno che non sia necessario l'oggetto del tempo, questo è il consiglio con cui andrei. –

+0

L'uso di regex porta i problemi da solo: molti formati temporali diversi rendono molto complicato verificare se l'ora indicata è valida. Quando vuoi supportare tutti/molti formati di tempo possibili, stai sostanzialmente reimplementando il metodo 'Time.parse()' ... – Veger

+3

Tutto dipende da quanto ti piace essere severo quando accetti i valori. Ho presunto la massima severità (solo cosa opzionale essendo uno zero iniziale in ore). La domanda non specifica. In aggiunta a ciò, 'Time.parse' sembra essere davvero liberale quando si tratta di argomenti. Prova, ad esempio: 'Time.parse '10'' e' Time.parse' asd''. Neanche lancia un'eccezione (almeno nella 1.9.1). Non ci farei molto affidamento. –

Problemi correlati