2015-02-05 4 views
0

나는 YYYY-MM-DD 형식의 날짜가있는 텍스트 필드를 가지고 있습니다. 내가하고 싶은 것은 날짜의 정확성을 검사하는 것입니다. 내 개념은 다음과 같습니다이 일을보다 효율적인 방법이텍스트 필드 값의 형식이 올바른지 확인하려면 어떻게합니까?

deadline = document.getElementById("Deadline").value; 
if (deadline[0] == "0" || 
    deadline[0] == "1" || 
    deadline[0] == "2" || 
    deadline[0] == "3" || 
    deadline[0] == "4" || 
    deadline[0] == "5" || 
    deadline[0] == "6" || 
    deadline[0] == "7" || 
    deadline[0] == "8" || 
    deadline[0] == "9"){ 
    if(deadline[1] == "0" || ...){ 
     if(deadline[2] == "0" || ...){ 
      ... 

      }else{alert("Wrong Format!")} 
     } 
    } 
} 

있습니까?

+0

그것은'document', 소문자입니다! – adeneo

답변

1

RegExp을 사용하여 당신에게 형식의 정확성에 대한 대략적인 아이디어를 줄 것이다 동안, 그것은하지 않습니다 값의 유효성을 확인하십시오. 더 나은 접근법은 이와 같은 것일 수 있습니다.

function inRange (val, min, max) { 
 
    return val >= min && val <= max; 
 
} 
 

 
var deadLine = document.getElementById('deadline'), 
 
    out = document.getElementById('out'); 
 

 
deadLine.addEventListener('change', function (e) { 
 
    var text = e.target.value, 
 
     valid, 
 
     parts, 
 
     year, 
 
     month, 
 
     day, 
 
     result; 
 

 
    if ((/^\d{1,4}-\d{2}-\d{2}$/).test(text)) { 
 
     parts = text.split('-'); 
 
     year = parts[0]; 
 
     month = parts[1]; 
 
     day = parts[2], 
 
     valid = inRange (year, 0, 9999) && 
 
       inRange (month, 1, 12) && 
 
       inRange (day, 0, 31) && 
 
       day == new Date(year, month - 1, day).getDate(); 
 
    } 
 

 
    if (valid) { 
 
     result = 'Correct Format and date!'; 
 
    } else { 
 
     result = 'Wrong Format or date!'; 
 
    } 
 
    
 
    out.appendChild(document.createTextNode(result + '\n')); 
 
}, false);
<input id="deadline" type="text"></input> 
 
<pre id="out"></pre>

+0

이것은 놀랍습니다! – user3383458

1

정규 표현식을 사용해야합니다. 코드를 https://regex101.com/r/iO0pY2/1에서 확인하십시오. 여기 당신이 그것을 사용하는 방법 :

var str = '2015-02-05' 
var re = /^(\d{4})\-(\d{1,2})\-(\d{1,2})$/ 
var valid = re.test(str); 
+0

괄호를 사용하거나 하이픈을 이스케이프 할 필요가 없습니다. 물론 년, 월, 일 값을 나중에 사용하지 않는 한. –

+0

@PeterHerdenborg true – SmartDev

2

를 사용하여 정규식 :

// yyyy-mm-dd 
 
var re = /^\d{4}-\d{1,2}-\d{1,2}$/; 
 

 
alert(re.test("2001-11-02"));

관련 문제