2014-07-07 1 views
-1

응용 프로그램을 개발 중입니다. 이 응용 프로그램에는 입력 필드가 있습니다. 어디javascript/jquery에서 다른 형식의 날짜를 테스트하는 방법은 무엇입니까?

ddmmyy, ddmmyyyy, dd-mm-yy, mm-dd-yy

같은 다른 형식으로 사용자 캔 입력 날짜 내가 여부를 그 유효 여부를 날짜를 확인해야합니다. 그것은 나에게이 유효한 동안 날짜를 반환 //

var myDate = new Date("1987-08-06") : 사용

YYYY-MM-DD : 나는 수이 방법의 유효성을 검사 할 수 있습니다.

하지만 다른 형식으로 유효성을 검사 할 수 없습니다. 어떻게 확인할 수 있습니까?

예 :

var myDate = new Date("08-06-1987") .. 등?

jQuery를 사용하여 응용 프로그램을 개발했습니다. 플러그인을 사용하지 않고 해결책을 찾고 있습니다. 왜냐하면 나는 이미 플러그인을 사용하지 않았기 때문이다.

미리 감사드립니다.

+0

를 사용하여 두 개의 입력. 하나는'YYYY-MM-DD' 형식의 * always *이고 숨겨진 서버 저장소입니다. 다른 하나는 사용자가 원하는대로 포맷 된 사용자에게 표시하기위한 것입니다. 사용자 형식을 데이터 형식으로 변환하려면 Date.js를 사용하십시오. 나는 당신이 플러그인을 말하지 않았지만, 플러그인의 수는 문제가되지 않으며, JS에서 날짜를 다루는 것은 엄청난 고통이므로 플러그인이 정말로 필요합니다. –

+0

날짜 형식이 '01-02-14'인지 어떻게 알 수 있습니까? dd-mm-yy 또는 mm-dd-yy ??? –

+0

사용자가'dd-mm-yy' 또는'mm-dd-yy'를 줄 필요가 있는지 여부에 따라 페이지에 따라 구성 및 유효성 검증을 유지합니다. 그래서 그에 따라 결정할 것입니다. – 3gwebtrain

답변

1

나는 정규 표현식으로 할 것이다. 각 형식에 대해 정규식 패턴을 정의 할 수 있습니다. 그런 다음 입력 필드의 String이 패턴과 일치하는지 테스트 할 수 있습니다. 이 같은 뭔가를해야만 : 당신은 여기에서 예를 찾을 수 있습니다

var regExpDDMMYY = /[0-9]{2}[0-1][0-9][0-9]{2}/g; 
var regExpddmmyyyy = ...; 
... 
... 

if (regExpDDMMYY.test(yourInputStringFromDateField)) { 
    // handleDateAs DDMMYY 
} else if (regExpddmmyyyy .test(yourInputStringFromDateField)) { 
    ... 
} else { 
    throw new YourException(); 
} 

: 날짜 http://www.w3schools.com/js/js_regexp.asp

1

네이티브 JS에는 "parseExact"가 없으므로 crossbrowser가됩니다. 따라서 Date.js 라이브러리를 사용하거나 변환기를 작성해야합니다. 난 당신이 추가 파서로 파서 lib 디렉토리를 확장 할 수 있습니다 이것에서 "책임의 체인"패턴

function DateTimeParser() { 
    this.parse = function (input) { 
     for (var key in Parsers) { 
      var result = Parsers[key].parse(input); 
      if (result !== null) 
      return result; 
     } 
     return null; 
    }; 
    this.parseExact = function (input, format) { 
     var parser = Parsers[format]; 
     return parser ? parser.parse(input) : null; 
    }; 

    var ConcreteDateTimeParser = function (expression, parser) { 
     this.parse = function (input) { 
      if (!input.match(expression)) 
       return null; 
      var result = parser(input); 
      return isNaN(result.getDate()) ? null : result; 
     }; 
    }; 

    var Parsers = { 
     "dd-mm-yyyy": new ConcreteDateTimeParser(/\d{2}\-\d{2}\-\d{4}/, function (input) { 
      var dd = parseInt(input.slice(0, 2)), 
       mm = parseInt(input.slice(3, 5)), 
       yyyy = parseInt(input.slice(-4)); 
      return new Date(yyyy, mm, dd);    
     }), 
     "ddmmyyyy": new ConcreteDateTimeParser(/\d{8}/, function (input) { 
      var dd = parseInt(input.slice(0, 2)), 
       mm = parseInt(input.slice(2, 4)), 
       yyyy = parseInt(input.slice(-4)); 
      return new Date(yyyy, mm, dd); 
     }) 
    }; 
}; 


var instance = new DateTimeParser(); 
instance.parse('22122012'); 
instance.parseExact('22122012', 'ddmmyyyy'); 
instance.parseExact('22122012', 'dd-mm-yyyy'); // null 

를 사용하는 것이 좋습니다 것이 작업을 위해

. DateTimeParser에 생성자 인수로 전달하여 다른 세트의 파서를 사용할 수도 있습니다. 내 코드는 꽤 사소한데, 나는 그것을 메가 - 깊게 쓰고 싶지 않았기 때문에, 그냥 길을 보여주고 싶었다. =)

관련 문제