【问题标题】:How do I check two regex values with vuelidate如何使用 vuelidate 检查两个正则表达式值
【发布时间】:2021-02-07 04:08:41
【问题描述】:

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

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,
    },

【问题讨论】:

标签: javascript regex vue.js vuelidate


【解决方案1】:

除了使用条件运算符,您还可以通过交替放置 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

【讨论】:

    猜你喜欢
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多