如何使用 vuelidate 检查两个正则表达式值

How do I check two regex values with vuelidate

我正在尝试使用 vuelidate 验证输入字段。如果以下任一正则表达式为真,我需要它 return 有效。

const val1 = helpers.regex('val1', /^\D*7(\D*\d){12}\D*$/)
const val2 = helpers.regex('val2', /^\D*1(\D*\d){11}\D*$/)

 const checkvals = () => {
  if(val1 || val2) {
      return true
  } else{
      return false
  }
}

验证

numbercheck: {
      required,
      checkvals
    },

如何让它工作?

解决方案

import { or, helpers, required } from 'vuelidate/lib/validators'

    const val1 = helpers.regex('val1', /^\D*7(\D*\d){12}\D*$/)
    const val2 = helpers.regex('val2', /^\D*1(\D*\d)11}\D*$/)


    checkvals: {
      numbercheck,
      valid: or(val1, val2) 
    },

解决方案 2

const numbercheck = helpers.regex("mob", /^\D*(?:7(?:\D*\d){12}|1(?:\D*\d)11})\D*$/);

验证

checkvals: {
      required,
      numeric,
      numbercheck,
    },

除了使用条件运算符,您还可以通过交替放置 7(\D*\d){12}1(\D*\d)11} 来使用单个模式,因为模式的开始和结束是相同的。

如果以后不需要捕获组的值,可以使用 (?:

将其转换为非捕获组

我怀疑在第二部分中,这个11}应该是像{11}

这样的量词

模式可能如下所示:

^\D*(?:7(?:\D*\d){12}|1(?:\D*\d){11})\D*$

说明

  • ^\D* 字符串开头并匹配 0+ 个非数字
  • (?: 交替的非捕获组
    • 7(?:\D*\d){12} 匹配 7 和由可选的非数字分隔的 12 位数字
    • |
    • 1(?:\D*\d){11} 匹配 1 和由可选非数字分隔的 11 个数字
  • )关闭非捕获组
  • \D*$ 匹配可选的非数字并断言字符串的结尾

看到一个regex demo