Chức năng moment.js isValid không hoạt động bình thường


81

Tôi có câu hỏi này ... Tôi không tìm thấy bất kỳ điều gì tương tự và có vẻ rất lạ là không ai gặp vấn đề này khi xác thực thời gian với moment.js.

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

Tôi có làm điều gì sai? Đây là một ví dụ:

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


3
Tôi chỉ có thể đoán rằng họ kiểm tra rõ ràng rằng định dạng bạn vượt qua đã được kiểm tra ... nhưng không có kiểm tra "giá trị có cùng độ dài với định dạng không?" ... Tôi khuyên bạn nên thử gửi báo cáo lỗi cho moment.js
scunliffe

... tại sao bạn lại có những ký tự phụ đó ngay từ đầu? Nó có xác thực chính xác chuỗi ngày dài hơn so với định dạng đó không?
Mathletics

ý bạn là gì với các ký tự phụ?
Mikel Sanchez

Câu trả lời:


178

Trong câu hỏi của bạn, bạn viết rằng moment('03:55jojojo', 'HH:mm',true).isValid();trả về true. Điều này là không chính xác. Vui lòng kiểm tra lại jsfiddle của bạn.

Từ http://momentjs.com/docs/

Trình phân tích cú pháp của Moment rất dễ tha thứ và điều này có thể dẫn đến hành vi không mong muốn. Kể từ phiên bản 2.3.0, bạn có thể chỉ định boolean cho đối số cuối cùng để làm cho Moment sử dụng phân tích cú pháp nghiêm ngặt. Phân tích cú pháp nghiêm ngặt yêu cầu định dạng và đầu vào phải khớp chính xác.

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

Bạn có thể sử dụng cả ngôn ngữ và sự nghiêm khắc.

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

1
đúng (index): 26 sự thật (index): 27 sự thật (index): 29 Đây là sản phẩm console log: S
Mikel Sanchez

Nếu bạn kiểm tra jsfiddle của mình, bạn sẽ nhận thấy rằng bạn KHÔNG chuyển true như một đối số thứ ba ở bất kỳ đâu, nhưng trong câu hỏi của bạn, bạn nói rằng moment('03:55jojojo', 'HH:mm',true).isValid();trả về true. Vui lòng chạy mã chính xác đó trong trình duyệt của bạn - đầu ra là sai.
Jan Sommer

3
Trời ạ, cảm ơn bạn rất nhiều, tham số thứ ba của true, đã cứu mạng tôi nhiều lần, tôi chỉ muốn nói rằng vì tôi luôn quay lại câu trả lời này.
Kadaj

moment ('13 / 13/2000 '). isValid () trả về true. Bạn phải bao gồm ký hiệu định dạng để nó xác thực đúng cách.
Kentonbmax

Cảm ơn. Cuối cùng tôi đã tìm ra câu trả lời là chính xác. Tôi cũng thiếu tham số thứ ba.
Shwe

1

Xin lỗi đã bỏ qua câu hỏi 5 năm tuổi này, nhưng tôi thực sự đã tình cờ gặp trường hợp monent không hoạt động bình thường đối với tài liệu, bằng cách sử dụng phiên bản 2.24.0.

Định dạng

Trong hình chúng ta có thể thấy ví dụ H chỉ nên đánh giá đến 0 - 23, nhưng nếu tôi sử dụng moment('01', 'H', true).isValid()tôi vẫn nhận được true.

Đây là jsfiddle: https://jsfiddle.net/wofgst5v/

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.