如何在mongoose中定义字符串数组?

4

我想定义一个文档为

numbers : ["99995", "44444", "666664".....]

数字不应以0开头,长度应为5。同时,至少应有1个元素。
我定义的mongoose模式如下:
numbers: {
  type: [String],
  length : 5,
  validator : (num) => {
      return /[1-9]{1}\d{4}.test(num);
    },
    message: props => `${props.value} is not a valid number!` 
  }    
}

但是我应该如何对数字长度进行检查,例如至少需要一个数字?

3个回答

2

当您创建自定义验证器时,您可以在函数中执行任何操作来验证数据。仅当验证通过时返回true,如果验证失败则返回false

validator: (num) => {
    if(num.length == 5) {
         return /[1-9]{1}\d{4}/.test(num); // You forgot to add / at the end of the RegEx
    }
    return false;
}

或者你可以使用 match 函数来验证字符串是否符合正则表达式,而不是创建自己的函数。
numbers: {
     type: [String], match: /^[^0]\d{4}$/
}

但是我该如何检查数字的长度,即最少需要一个数字? - Ankuj
什么是最小值? - Yves Kipondo
@YvesKipondo 基本上,作者希望numbers字段至少有一个值,非空,其余条件适用于值。 - Shivam Pandey

0

这应该适合你的需要:

numbers: [{
    type: String,
    length: 5,
    required: [true, 'Why no numbers?'],
    validate: {
      validator: function(num) {
        return /^[1-9]{1}\d{4}$/.test(num);
      },
      message: props => `${props.value} is not a valid phone number!`
    },
  }]

它通过required强制至少一个元素,并确保您只能保存以大于0的数字开头,具有4个或更多字符并且长度正好为5个字符的字符串(通过自定义validate函数使用正则表达式测试)。


0
尝试使用required: true
validate: {
    validator: function(values) { 
       // Write validator for each value
    },
    message: "add a custom message"
},
required: [true, "numbers cannot be empty"]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接