moment.js isValid 함수가 제대로 작동하지 않습니다.


81

이 질문이 있습니다 ... 비슷한 것을 찾지 못했고 moment.js로 시간을 확인하는 데 아무도 문제가 없다는 것도 매우 이상하게 보입니다.

moment('03:55', 'HH:mm').isValid(); //true
moment('03:55jojojo', 'HH:mm').isValid(); //true
moment('03:55jojojo', 'HH:mm',true).isValid(); //true

내가 뭘 잘못하고 있니? 예를 들면 다음과 같습니다.

http://jsfiddle.net/vCGAp/145/


3
통과 한 형식이 테스트되었는지 명시 적으로 테스트한다고 추측 할 수 있습니다.하지만 "값이 형식과 동일한 길이입니까?"에 대한 확인이 없습니다. moment.js에 버그 보고서를 제출하는 것이 좋습니다.
scunliffe 2013

... 처음에 추가 캐릭터가있는 이유는 무엇입니까? 해당 형식에 대해 더 긴 날짜 문자열을 올바르게 검증합니까?
Mathletics

추가 문자는 무엇을 의미합니까?
Mikel Sanchez 2013

답변:


178

귀하의 질문에 당신 moment('03:55jojojo', 'HH:mm',true).isValid();은 사실 을 반환합니다. 이것은 올바르지 않습니다. jsfiddle을 다시 확인하십시오.

에서 http://momentjs.com/docs/

Moment의 파서는 매우 관대하며 이로 인해 원하지 않는 동작이 발생할 수 있습니다. 버전 2.3.0부터는 Moment가 엄격한 구문 분석을 사용하도록 마지막 인수에 부울을 지정할 수 있습니다. 엄격한 구문 분석을 수행하려면 형식과 입력이 정확히 일치해야합니다.

moment('It is 2012-05-25', 'YYYY-MM-DD').isValid();        // true
moment('It is 2012-05-25', 'YYYY-MM-DD', true).isValid();  // false
moment('2012-05-25', 'YYYY-MM-DD', true).isValid();        // true

언어와 엄격함을 모두 사용할 수 있습니다.

moment('2012-10-14', 'YYYY-MM-DD', 'fr', true);

1
true (인덱스) : 26 true (인덱스) : 27 true (인덱스) : 29 다음은 콘솔 로그 출력입니다. S
Mikel Sanchez 2013

jsfiddle을 확인하면 어디서나 세 번째 인수로 true를 전달하지 않지만 질문에서 moment('03:55jojojo', 'HH:mm',true).isValid();true 를 반환 한다고 진술 합니다. 브라우저에서 정확한 코드를 실행하십시오-출력은 거짓입니다.
Jan Sommer 2013

3
정말 감사합니다. 사실의이 세 번째 매개 변수는 제 목숨을 여러 번 구했습니다. 제가 항상이 답변으로 돌아 오기 때문에 말하고 싶었습니다.
Kadaj

moment ('13 / 13 / 2000 '). isValid ()는 true를 반환합니다. 올바르게 유효성을 검사하려면 형식 지정을 포함해야합니다.
Kentonbmax

감사. 나는 마침내 올바른 답을 찾았습니다. 세 번째 매개 변수도 누락되었습니다.
Shwe

1

이 5 년 된 질문을 necro 해 주셔서 죄송하지만 버전 2.24.0을 사용하여 monent가 문서에서 제대로 작동하지 않는 경우를 발견했습니다.

형식

그림에서 예를 들어로 H평가되어야한다는 것을 알 수 0 - 23있지만 사용하면 moment('01', 'H', true).isValid()여전히 true.

다음은 jsfiddle입니다 : https://jsfiddle.net/wofgst5v/

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.