我想验证一组对象的有效时间值

I want to validate an array of objects for valid time values

我正在尝试验证以下对象数组: [{from: '10:00', to: '16:00'}, null, {from: '09:00', to: '16:00'}, etc. ]

我想要那个数组中正好有 7 个对象,我该如何验证?我想同时添加 .min(7).max(7) 并不是最佳做法。我怎样才能让 NULL 值也通过?

另外这部分好不好,或者你会改变什么吗?我是 JavaScript.

的新手
schedule: array().of(
    object().shape({
      from: string()
        .required()
        .matches(/^(0[0-9]|1[0-9]|2[0-3]):(00|30)$/),
      to: string()
        .required()
        .matches(/^(0[0-9]|1[0-9]|2[0-3]):(00|30)$/),
    })
  ),

使用验证 is() 属性。这是文档 link:https://validatejs.org/#validators-length

要将某些内容检查为简单的时间值,即 12:34,您可以使用此正则表达式:/^[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$/。代码:

var item = '10:00';
console.log(item.match(/^[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$/));

  • ^ : 表示字符串的开始。
  • [0-5]: 某个字符0到5.
  • [0-5]{1}: 某个字符 0 到 5,并且恰好是其中一个。
  • [0-9]: 从0到9的某个字符。
  • [0-9]{1}: 0 到 9 中的某个字符,并且恰好是其中之一。
  • [0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}:介于 00:00 和 59:59 之间。
  • $:表示字符串结束。

我已经为你的数据结构实现了它。注意:我添加了一个假值,所以我们可以看到它实际上表示无效。

var items = [
  {from: '10:00', to: '16:00'},
  null,
  {from: '09:00', to: '16:00'},
  {from: '09:00', to: '16:001234'}
];

items.forEach((item) => {
    logstring = "Item : ";
    if(!item) {
      logstring += 'NULL/VALID';
    } else {
      logstring += item.from + " " ;
      if(item.from.match(/^[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$/)) {
          logstring += 'VALID';
      } else {
          logstring += 'INVALID';
      }
      
      logstring += ', ' + item.to + " " ;
      if(item.to.match(/^[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$/)) {
          logstring += 'VALID';
      } else {
          logstring += 'INVALID';
      }
    }
    console.log(logstring);
});