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 个实例)