2013-03-28 3 views
2

Javascript 또는 jquery에서 주어진 문자열이 h : m 또는 hh : mm 형식인지 아니면 h 형식인지를 확인할 수있는 방법이 있습니까? 예 :구문 분석 시간 문자열

5 //legal  
2.5 //legal 
.5 //legal 
2:05 //legal 
:5 //NOT legal 
2:61 // NOT legal 

생각이 문자열은 이중으로 해석 할 수 있습니다 또는이 시간에 분석 할 수있는 경우 : m 형식은 다음 괜찮습니다.

이것은 24 시간이 아니며 33:44가 완벽하게 유효합니다. 이는 근무 시간 입력 용입니다.

감사

+0

': 5'는 유효하지 않지만'h : m'에 대해 물어 보니'2 : 5'가 있다고 가정합니다. 그 맞습니까? 또한, '2.75'는 합법적이며 (2 및 3/4 시간) 불법입니다 (불법적 인'2 : 75 '의 줄임말)? – DocMax

답변

0

나는 문제가 이러한 코드로 해결 될 수 있습니다 생각 :

function validate(value) { 
      if (!parseFloat(value)) { 
       var values = value.split(':'); 
       if (!parseInt(values[0]) || parseInt(values[1]) >= 60) { 
       return false; 
       } 
      } 
      else { 
      var values = value.split('.'); 
      if (parseInt(values[1]) >= 60) 
       return false; 
      } 
      return true; 
} 
+0

'validate ('Infinityisnotavalidtime'); // true' – MikeM

+0

'validate ('10pmismybedtime'); // true' – MikeM

+0

'validate ('0'); // false' –

0
function test(str) { 
    if (!isNaN(str)) return true; 
    $parts = str.split(':'); 
    return !isNaN(str[0]) && !isNaN(str[1]) && (+str[1]) <= 60; 
} 
+0

Er, 즉시 돌아 오면 유효한 시간은지나 가지 않습니다. 문자열은 any :를 포함하지 않습니다. 그 문자열이 즉시 필터링되어 –

+0

아니요, 그렇지 않습니다. isNaN ('2.5')' === false –

+0

@ColinDeClue 당신 말이 맞아요. –

0

(h 모든 값이 될 수 있도록) 당신이 기간을 원하는 경우에, 같은 정규 표현식에 모두 번호와 시간에 대한 시험 : 대한 true을 반환

/^(?:\.\d+|\d+(?:\.\d*)?|\d+:[0-5]?\d)$/.test(str) 

법적 케이스 및 false 그렇지 않으면

0

시도

/^(\d+|\d*(\.[0-5]?\d)|\d+(:[0-5]?\d)?)$/ 

일예

function verify(time) { 
    return /^(\d+|\d*(\.[0-5]?\d)|\d+(:[0-5]?\d)?)$/.test(time); 
} 

verify('24:00'); // true 
+0

질문에서 마지막이 아닌 (감사하지 않음) 행을 기반으로 가정 할 필요가 없습니다. – DocMax

+0

@DocMax. Yeas, 그냥 눈치 챘습니다. – MikeM