2013-01-02 3 views
0

날짜를 확인하는 데 문제가 있습니다. 내 코드에서 "잘못된 날짜"라고 쓰여진 날짜를 2013 년으로 지정하면 2012 년 날짜를 허용하는 정규식을 사용했습니다. 이 점에 대해 친절히 도와주세요. 그것은 어떤 년든지 받아 들여야한다. 나는 2000 년에서 3000 년까지 유효한 년을 의미한다. 미리 감사드립니다.날짜 유효성 검사를위한 정규식

function checkDates(){ 
    var sdate = "2013-01-02"; 
    var edate = "2013-01-02"; 

    if (!isValidDate(sdate)) { 
     alert("Report Start Date is Invalid!!"); 
     return false; 
    } 

    if (!isValidDate(edate)) { 
    alert("Report End Date is Invalid!!"); 
    return false; 
    } 
    return true; 
} 


function isValidDate(sText) { 

    var reDate = /(?:([0-9]{4}) [ -](0[1-9]|[12][0-9]|3[01])[ -]0[1-9]|1[012])/; // yy/mm/dd 
    return reDate.test(sText); 
} 
+0

정규식으로 날짜의 유효성을 올바르게 검사하는 것이 불가능하지 않습니까? 2 월에 28 일에서 29 일 사이에 어떻게 결정할 수 있습니까? –

답변

6

정규식에 여분의 공간이 누락 된 브래킷 (브래킷 문제가 2012-aa-xx 날짜 받아 들일 수있다 : 그래서

/(?:([0-9]{4}) [ -](0[1-9]|[12][0-9]|3[01])[ -]0[1-9]|1[012])/ 
      ^       ^
-------------/-------------------------------/ 

:

([0-9]{4}[ -](0[1-9]|[12][0-9]|3[01])[ -](0[1-9]|1[012])) 
+0

예, .. 대괄호로 인해 문제가 발생합니다. 정정 해 주셔서 감사합니다. 표현이 작동합니다! @oleq : 감사합니다. – madhu

1

아래의 표현도

작동은
/(?:19|20\d{2})\-(?:0[1-9]|1[0-2])\-(?:0[1-9]|[12][0-9]|3[01])/ 

고마워, Dhiraj

관련 문제