2010-05-11 15 views
6

Denetime sahip olmadığım bir feed'den veri alıyorum ve verdiğim bir dizenin geçerli bir zaman olup olmadığını doğrulamam gerekiyor.Ruby: Bir dizenin geçerli bir süre olup olmadığını nasıl kontrol edebilirim?

Çoğu zaman doğru şekilde "2:35" veya "15:41" gibi bir şey gönderdim, ancak diğer zamanlarda "AM" veya "PM" (ve sayı yok) gibi şeyler ... sonuçta bende sadece bunları görmezden gelmelisin.

Verilerin geçerli bir süre olup olmadığını nasıl doğrulayabilirim?

cevap

8

Sen Time.parse() kullanabilir ve ArgumentError istisnası için kontrol edebilirsiniz geçersiz zamanlar için.

Ekstra avantajı, eğer geçerli ise, kullanılabilir bir formatta zamanınız olmasıdır!

+6

Doğrulamak için ayrıştırma kullanmayın! Time.parse ('2: 34-^5') # => 2012-08-14 02:34:00 -0400 – Bob

+5

Doğrulamak için ayrıştırmayı kullanmak bazı hatalı zamanlara yol açabilir, örneğin: 'Time.parse ('27 : 45 PM ') '=> 2012-12-04 15:45:00 -0500 – tjstankus

7

Size tam olarak geçerli bir zaman olmayı kabul belirtmediniz (örneğin isteğe bağlı saniye kabul edip, etmemeye), bu yüzden burada bir tahminim bu:

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

Bir kurtarma ile Time.parse() çalışmasına rağmen, regex çözümünü tercih ederim. Ruby'de istisnalar gerçekten hızlı sayılmaz, bu yüzden zaman nesnesine ihtiyacınız olmadıkça, bu benim önerim olur. –

+0

Regex kullanımı kendi başına problemleri beraberinde getirir: verilen zamanın geçerli olup olmadığını kontrol etmek için oldukça karmaşık olan çok sayıda farklı zaman formatı. Tüm/en olası zaman biçimlerini desteklemek istediğinizde, temelde 'Time.parse()' yöntemini yeniden oluşturuyorsunuz ... – Veger

+3

Tüm değerler, değerleri kabul ederken ne kadar katı olmak istediğinize bağlı. Azami sıkılık varsaydım (saatlerce önde gelen sıfır olan sadece isteğe bağlı şey). Soru belirtmiyor. Buna ek olarak, 'Time.parse' argümanlara gelince gerçekten liberal gibi görünüyor. Örneğin, deneyin: 'Time.parse' 10 've 'Time.parse' asd '. Ne de bir istisna atar (en azından 1.9.1). Gerçekten ona güvenmezdim. –

İlgili konular