2010-05-11 6 views
6

내가 제어 할 수없는 피드에서 데이터를 가져 오는 중이며 주어진 문자열이 유효한 시간인지 확인해야합니다.Ruby : 문자열이 유효한 시간인지 확인하는 방법은 무엇입니까?

대부분 "2:35"또는 "15:41"과 같이 보내지 만 다른 시간에는 "AM"또는 "PM"(숫자 없음)과 같은 것이므로 궁극적으로 단지 그것들을 무시할 필요가 있습니다.

그렇다면 데이터가 유효한 시간인지 어떻게 확인할 수 있습니까?

답변

8

당신은 Time.parse()를 사용하고 ArgumentError 예외를 확인할 수 있습니다 무효 시간.

추가 장점은 유효한 경우 사용할 수있는 형식의 시간도 있다는 것입니다.

+6

유효성을 검사 할 때 구문 분석을 사용하지 마십시오! Time.parse ('2 : 34-^5') # => 2012-08-14 02:34:00 -0400 – Bob

+5

유효성 검사에 구문 분석을 사용하면 잘못된 시간이 누락 될 수 있습니다. 예 :'Time.parse ('27 : 45 PM ')'=> 2012-12-04 15:45:00 -0500 – tjstankus

7

당신은 정확하게 당신이 유효한 시간으로 가정 무엇을 지정하지 않은 (예를 들어, 당신은 선택 초를 허용할지 여부), 그래서 여기에 하나의 추측 :

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

비록 구조가있는 Time.parse()가 작동 할 수 있지만 정규 표현식 솔루션을 선호합니다. 루비의 예외는 정말 빠르다고 생각하지 않기 때문에 시간 객체가 필요하지 않으면 이것이 제가 할 충고입니다. –

+0

regex를 사용하면 자체적으로 문제가 발생합니다. 여러 시간 형식이 매우 복잡하여 주어진 시간이 유효한지 확인해야합니다. 가능한 모든 시간 형식을 지원하려면 기본적으로'Time.parse()'메소드를 다시 구현해야합니다 ... – Veger

+3

모두 값을 수락 할 때 얼마나 엄격한 지에 달려 있습니다. 나는 최대 엄격 성 (시간의 선행 0 인 선택 사항 만)을 가정했다. 질문은 명시하지 않습니다. 그 외에도,'Time.parse'는 인수에 관해서 정말 진보적 인 것처럼 보입니다. 예를 들어'Time.parse '10'과'Time.parse 'asd'를 시도해보십시오. 어느 쪽도 예외를 throw하지 않습니다 (적어도 1.9. 1). 나는 정말로 그것에 의존하지 않을 것이다. –

관련 문제