ReactJS 中的正则表达式时间字段验证失败
Regex time field validation fails in ReactJS
我正在按照这个 解决方案来验证 Django 的 TimeField
对象 06:00:00
在反应中。验证失败并显示错误 "Checkin Time" with value "06:00:00" fails to match the required pattern: /^([0-9]{2})\:([0-9]{2})$/
此正则表达式可能有什么问题。
这是我的 Joi 架构。请协助
schema = {
checkin: Joi.string()
.regex(/^([0-9]{2})\:([0-9]{2})$/)
.label("Checkin Time"),
checkout: Joi.string()
.regex(/^([0-9]{2})\:([0-9]{2})$/)
.label("Checkout Time"),
};
问题是由正则表达式中的 ^
和 $
字符引起的。它们表示要比较的字符串的开头和结尾。您基本上是在说该值必须恰好是两组两位数,用冒号分隔。但是,您的示例包括秒(三组两位数,用冒号分隔)。为了支持这一点,在将秒部分保留为可选的同时,您可以执行以下操作:
/^([0-9]{2}):([0-9]{2})(:[0-9]{2})?$/
我们基本上创建了另一个包含冒号和秒部分的捕获组,并将其设为可选(?
匹配模式的 0 或 1 个实例)
我正在按照这个 TimeField
对象 06:00:00
在反应中。验证失败并显示错误 "Checkin Time" with value "06:00:00" fails to match the required pattern: /^([0-9]{2})\:([0-9]{2})$/
此正则表达式可能有什么问题。
这是我的 Joi 架构。请协助
schema = {
checkin: Joi.string()
.regex(/^([0-9]{2})\:([0-9]{2})$/)
.label("Checkin Time"),
checkout: Joi.string()
.regex(/^([0-9]{2})\:([0-9]{2})$/)
.label("Checkout Time"),
};
问题是由正则表达式中的 ^
和 $
字符引起的。它们表示要比较的字符串的开头和结尾。您基本上是在说该值必须恰好是两组两位数,用冒号分隔。但是,您的示例包括秒(三组两位数,用冒号分隔)。为了支持这一点,在将秒部分保留为可选的同时,您可以执行以下操作:
/^([0-9]{2}):([0-9]{2})(:[0-9]{2})?$/
我们基本上创建了另一个包含冒号和秒部分的捕获组,并将其设为可选(?
匹配模式的 0 或 1 个实例)