2013-07-02 2 views
3

나는 사용자에게 생년월일을 입력하길 원합니다. 그리고 YYYY-MM-DD 형식으로하고 싶습니다. Node-Validator는 특정 형식이 아닌 모든 날짜 형식의 유효성을 검사합니다. 그래서 12324433을 입력하면, 그것의 획기적인 시간을 생각할 때 유효성도 확인됩니다.Nodejs의 날짜 유효성 검사

내가 어떻게해야합니까? 이 질문은 몽구스의 유효성 확인과 관련되어 있습니다.

+0

비슷한 이름의 프로젝트가 몇 가지 있습니다. 정확히 어떤 거에요? [Github의 ['node-validator'] (https://github.com/chriso/node-validator) (NPM의''validator') (https://npmjs.org/package/validator))? [NPM의 노드 검증] (https://npmjs.org/package/node-validation)? 다른? –

+0

https://github.com/chriso/node-validator/blob/master/lib/validators.js 또는 Github의 node-validator 및 NPM의 validator에 대해 언급했듯이. 나는 실제로 그것을 위에 언급했다. 그러나 그것이 어떻게 유효한지 말해 줄 필요는 없습니다. –

답변

8

저는 express-form의 팬이며, moment.js도 사용할 수 있습니다. 나는 moment.js 워드 프로세서에서이 바로 그 이유

을 위해 그것을 나 자신을 사용했습니다 :

moment("2011-10-10", "YYYY-MM-DD").isValid(); // true 
moment("2011-10-50", "YYYY-MM-DD").isValid(); // false (bad day of month) 

건배, 나는이 도움이 :)

PS 희망 - moment.js github url 단지의 경우.

+1

데이빗처럼 나는이 작업을 위해 매우 편리한 순간을 발견했습니다. 이 작업을 실제로 잘 처리합니다. – BrandonKowalski

+0

참고 : 입력 문자열이 형식 문자열과 일치하는지 확인하는 데 사용하기위한 것이 아닙니다. 형식 일치의 엄격 성은 응용 프로그램 및 비즈니스 요구 사항에 따라 다를 수 있으므로 이러한 종류의 유효성 검사는 Moment.js에 포함되어 있지 않습니다. 이것은 문서 자체에 있습니다. 당신은 여전히 ​​그들의 검증 방법을 사용해야한다고 생각합니까? 그리고 위에서 언급 한 정규식은 아닙니까? –

+0

나는 그것들을 조심스럽게 생각하고 당신의 타임 스탬프를 살균하는 것을 의미한다고 생각한다. - 유효성 확인을 위해서만 순간을 요구하지는 않을 것이다.이 독점적 인 사용을 위해서라면 단지 아래처럼 유일한 RegEx를 할 것이다. 케이스. 건배! – David

1

노드 유효성 검사기의 설명서에서 가리키는 것처럼 "정규식이 아마도 더 나은 선택" 일 것입니다. 나는 꽤 잘 보이는 정규식을 채찍질했다. 그리고 나는 그것이 일을 끝낼 것이라고 믿지만, 그것을 사용할 계획이라면 그것을 철저히 테스트 할 것을 조언한다.

/\d\d\d\d-(0[1-9]|1[0-2])-(0[1-9]|[1-2]\d|3[0-1])/ 

이 정규식은 필요한 YYYY-MM-DD 형식의 날짜를 확인합니다. 당신은 여기를 사용하는 작업 코드 볼 수 있습니다 http://tinker.io/c269b/

행운을 빕니다!

편집 : 나는 그것을 나누기 뭔가를 발견 . 이 정규식은 부분 일치를 확인하므로 "1970-01-011"과 같은 입력이 유효한 것으로 확인됩니다. 이는 시작 마커를 정규식에 추가하는 것을 잊었 기 때문에 발생합니다. 이것은 내가 그것을 고정 후 보이는 방법입니다

/^\d\d\d\d-(0[1-9]|1[0-2])-(0[1-9]|[1-2]\d|3[0-1])$/ 

팅커의 예는 수정 업데이트됩니다.

+0

답해 주셔서 감사합니다. 얼마나 철저히 테스트해야합니까? –

+0

확실하지 않습니다. 방금 생각한 몇 가지 입력을 시도했습니다. 그게 전부입니다. 나는 그것이 01-12 일과 01-31 일 사이의 여러 달을 잘 다룹니다. 당신이 그것을 깨뜨릴만한 다른 것을 생각해 낼 수 있는지보십시오. –

+0

당신의 메소드가 mongoose validate 메소드를 호출 할 수 있기 전에는 적당하지 않습니다. mongoose가 문자열을 날짜 오브젝트로 변환했습니다. 그것의 정수라도, 그것을 에포크 시간으로 간주하고 변환합니다. 업데이트 된 질문이 있는지 확인하십시오 (몽구스 유효성 검사를 편집했습니다) –