【问题标题】:validate.js validating array elementsvalidate.js 验证数组元素
【发布时间】:2016-08-30 07:31:21
【问题描述】:

我有一个包含两个数组属性的 java 脚本对象:

我正在使用validate.js 库。

例如:

var customer = {
   name: 'Ted',
   address: 'some address',
   friends: ['Michelle','Elon'],
   purchases: [{ qty:1, goods: 'eggs'}, { qty:2, goods: 'apples'}]
}

我想验证以下内容:

  1. 朋友数组只包含字符串类型的元素。
  2. 购买数组包含至少 1 次但最多 5 次购买,并且数量始终为数字。

如何使用 validate.js 做到这一点?

【问题讨论】:

标签: javascript arrays validation


【解决方案1】:

你可以创建一个custom validator,我们称之为array

import validate from 'validate.js/validate'
import isEmpty from 'lodash-es/isEmpty'

validate.validators.array = (arrayItems, itemConstraints) => {
  const arrayItemErrors = arrayItems.reduce((errors, item, index) => {
    const error = validate(item, itemConstraints)
    if (error) errors[index] = { error: error }
    return errors
  }, {})

  return isEmpty(arrayItemErrors) ? null : { errors: arrayItemErrors }
}

然后像这样使用它:

const customerConstraints = {
  purchases: {
    array: {
      qty: {
        numericality: {
          onlyInteger: true,
          greaterThan: 0,
          lessThanOrEqualTo: 5
        }
      }
    }
  }
}

const customerErrors = validate(customer, customerConstraints)

然后在渲染块中迭代customer.purchases数组时,您可以通过检查customerErrors.purchases.errors[index].error.qty来查看是否有任何购买项目有错误

【讨论】:

  • 嗨,您好,我是 mongoose 的新手,关于数组内元素(字符串)验证的文章和论坛太多,但对我没有任何帮助。我想你可以帮助我。截至目前,我有标签: [ {type: String, minLength: 2, maxLength:50, trim: true}] 这只是 min,maxLength 不起作用。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多