javascript - 如何正确格式化 JOI 日期/模式?
问题描述
我有一个通过obj.pattern
. 我要验证的关键是格式化的日期,它以下列格式提供给函数DD/MM/YYYY
。
我Joi.date
用来验证这个值,当日期小于每月 12 日时,这很好。如果更多,则返回错误。假设默认 JOI 格式MM/DD/YYYY
显然会导致错误,因为日历年有 12 个月。这反映在控制台日志中 - 如果我将日期值更改为numberField
大于 12 的任何值,那么我可以看到错误。如果它保持在下方,则不会引发错误。
我想弄清楚如何格式化此响应,以便 JOI 可以验证正确的架构。我已将问题简化并简化为我在此处分享的原型:https ://codesandbox.io/embed/naughty-booth-862wb
任何人都可以帮忙吗?
解决方案
您需要使用包中的.format()
方法joi-date
来设置自定义日期格式。请参阅内联评论。
import "./styles.css";
import JoiBase from "@hapi/joi";
import JoiDate from "@hapi/joi-date";
const Joi = JoiBase.extend(JoiDate); // extend Joi with Joi Date
document.getElementById("app").innerHTML = `
<h1>Hello Vanilla!</h1>
<div>
We use Parcel to bundle this sandbox, you can find more info about Parcel
<a href="https://parceljs.org" target="_blank" rel="noopener noreferrer">here</a>.
</div>
`;
export const dateRequired = (keys, message) => {
return Joi.object().pattern(
Joi.valid(keys),
Joi.date()
.format("DD/MM/YYYY") // set desired date format here
.raw()
.error(() => "message")
);
};
const state = {
numberField: "14/09/1995" // "14/9/1995" will fail without leading "0" on 09
};
const schema = dateRequired(["numberField"]);
const valid = Joi.validate(state, schema); // "valid" is a promise
valid
.then(res => {
console.log("SUCCESS", res);
})
.catch(e => {
console.log("ERROR", e.toString());
});
推荐阅读
- javascript - jQuery git 版本
- php - Laravel 5 在没有 SSH 的共享主机上:如何将上传的文件直接存储到 public_html 文件夹?
- windows - 如何运行 Hardware Lab Kit Ndis 6.5 LWF Logo 测试?
- python - 一个错误
从使用 pyzillow - java - vertx-redis-client 3.7.0:如何使用 redis 事务
- javascript - 我想在表格行的一列中存储可变数据
- android - Google Play App Signing and signature level permission
- java - Finding Deci-Binary for given input
- java - Spring boot Resttemplate通过ssh隧道的动态代理设置连接不识别远程DNS
- postgresql - kafka 连接器 jdbc-sink 最后出现语法错误