내가 제어 할 수없는 피드에서 데이터를 가져 오는 중이며 주어진 문자열이 유효한 시간인지 확인해야합니다.Ruby : 문자열이 유효한 시간인지 확인하는 방법은 무엇입니까?
대부분 "2:35"또는 "15:41"과 같이 보내지 만 다른 시간에는 "AM"또는 "PM"(숫자 없음)과 같은 것이므로 궁극적으로 단지 그것들을 무시할 필요가 있습니다.
그렇다면 데이터가 유효한 시간인지 어떻게 확인할 수 있습니까?
내가 제어 할 수없는 피드에서 데이터를 가져 오는 중이며 주어진 문자열이 유효한 시간인지 확인해야합니다.Ruby : 문자열이 유효한 시간인지 확인하는 방법은 무엇입니까?
대부분 "2:35"또는 "15:41"과 같이 보내지 만 다른 시간에는 "AM"또는 "PM"(숫자 없음)과 같은 것이므로 궁극적으로 단지 그것들을 무시할 필요가 있습니다.
그렇다면 데이터가 유효한 시간인지 어떻게 확인할 수 있습니까?
당신은 Time.parse()를 사용하고 ArgumentError 예외를 확인할 수 있습니다 무효 시간.
추가 장점은 유효한 경우 사용할 수있는 형식의 시간도 있다는 것입니다.
당신은 정확하게 당신이 유효한 시간으로 가정 무엇을 지정하지 않은 (예를 들어, 당신은 선택 초를 허용할지 여부), 그래서 여기에 하나의 추측 :
data =~ /^([01]?[0-9]|2[0-3])\:[0-5][0-9]$/
비록 구조가있는 Time.parse()가 작동 할 수 있지만 정규 표현식 솔루션을 선호합니다. 루비의 예외는 정말 빠르다고 생각하지 않기 때문에 시간 객체가 필요하지 않으면 이것이 제가 할 충고입니다. –
regex를 사용하면 자체적으로 문제가 발생합니다. 여러 시간 형식이 매우 복잡하여 주어진 시간이 유효한지 확인해야합니다. 가능한 모든 시간 형식을 지원하려면 기본적으로'Time.parse()'메소드를 다시 구현해야합니다 ... – Veger
모두 값을 수락 할 때 얼마나 엄격한 지에 달려 있습니다. 나는 최대 엄격 성 (시간의 선행 0 인 선택 사항 만)을 가정했다. 질문은 명시하지 않습니다. 그 외에도,'Time.parse'는 인수에 관해서 정말 진보적 인 것처럼 보입니다. 예를 들어'Time.parse '10'과'Time.parse 'asd'를 시도해보십시오. 어느 쪽도 예외를 throw하지 않습니다 (적어도 1.9. 1). 나는 정말로 그것에 의존하지 않을 것이다. –
유효성을 검사 할 때 구문 분석을 사용하지 마십시오! Time.parse ('2 : 34-^5') # => 2012-08-14 02:34:00 -0400 – Bob
유효성 검사에 구문 분석을 사용하면 잘못된 시간이 누락 될 수 있습니다. 예 :'Time.parse ('27 : 45 PM ')'=> 2012-12-04 15:45:00 -0500 – tjstankus