2012년 2월 21일 화요일

스크립트 날자 유효성 검사(TextBox)

function jsDayCheck(Obj)
{
    var strValue = Obj.value;
    var chk1 = /^(19|20)\d{2}-([1-9]|1[012])-([1-9]|[12][0-9]|3[01])$/;
    var chk2 = /^(19|20)\d{2}\/([0][1-9]|1[012])\/(0[1-9]|[12][0-9]|3[01])$/;
    //var chk2 = /^(19|20)\d{2}-([0][1-9]|1[012])-([012][1-9]|3[01])$/;
    if (strValue == "")
    { // 공백이면 무시
         return true;
    }

    //-------------------------------------------------------------------------------
    // 유효성 검사- 입력형식에 맞게 들왔는지 // 예) 2000-1-1, 2000-01-01 2가지 형태 지원
    //-------------------------------------------------------------------------------
    if (chk1.test(strValue) == false && chk2.test(strValue) == false)
    { // 유효성 검사에 둘다 성공하지 못했다면
        alert("1999-1-1 형식 또는 \r\n1999-01-01 형식으로 날자를 입력해주세요.");
       Obj.value = "";
       Obj.focus = true;
       return false;
    }

    //-------------------------------------------------------------------------------
    // 존재하는 날자(유효한 날자) 인지 체크
    //-------------------------------------------------------------------------------
    var bDateCheck = true;
    var arrDate = Obj.value.split("-");
    var nYear = Number(arrDate[0]);
    var nMonth = Number(arrDate[1]);
    var nDay = Number(arrDate[2]);

    if (nYear < 1900 || nYear > 3000)
    { // 사용가능 하지 않은 년도 체크
        bDateCheck = false;
    }

    if (nMonth < 1 || nMonth > 12)
    { // 사용가능 하지 않은 달 체크
        bDateCheck = false;
    }

    // 해당달의 마지막 일자 구하기
    var nMaxDay = new Date(new Date(nYear, nMonth, 1) - 86400000).getDate();
    if (nDay < 1 || nDay > nMaxDay)
    { // 사용가능 하지 않은 날자 체크
        bDateCheck = false;
    }

    if(bDateCheck == false) 
    { 
       alert("존재하지 않은 년월일을 입력하셨습니다. 다시한번 확인해주세요");
       return false;
    }
}

댓글 2개:

  1. var chk2 = /^(19|20)\d{2}-([0][1-9]|1[012])-([012][1-9]|3[01])$/;

    문구를
    var chk2 = /^(19|20)\d{2}\/([0][1-9]|1[012])\/(0[1-9]|[12][0-9]|3[01])$/;
    바꾸어야 할듯 보입니다.
    안그러면 2012-10-10 을 잘못판단합니다.
    일이 10, 20 일떄 판단에 문제가 생깁니다.

    답글삭제
  2. 네~~ 조언 감사합니다.
    바로 수정하도록 하겠습니다 ^^

    답글삭제