【问题标题】:vue validate input with regex add maskvue 使用正则表达式添加掩码验证输入
【发布时间】:2020-06-18 06:57:49
【问题描述】:

我有一个输入字段,我验证@blur

目标是允许 9 个数字按 3 分组,后面加一个点,例如:

123456789 这应该被屏蔽为123.456.789

但用户也应该可以自己输入123.456.789

这是我目前得到的,我强制用户输入123.456.789

<input
    @blur="validateNumber($event.target.value)"
>


validateNumber(value) {
  if (/^(\d{3}\.){2}\d{3}$/.test(value)) {
     this.validNumber = true;
     return;
  } 

  this.validNumber = false;
  return;

}

我需要一种方法来允许123456789 并使其成为123.456.789

【问题讨论】:

  • 10、11 和 12 位数字的点应该放在哪里?
  • @TimBiegeleisen 它应该始终是每 3 个分组的 12 个数字,所以总是 3 个数字,然后是一个点

标签: javascript regex vue.js


【解决方案1】:

您可以使用 OR 运算符 | 将仅数字检查添加到现有模式中

(^\d{9}$)|(^(\d{3}\.){2}\d{3}$)

或者通过两个单独的检查使其更具可读性

if (/^\d{9}$/.test(value) || /^(\d{3}\.){2}\d{3}$/.test(value))

要添加掩码,将检查分开并修改值(如果它是数字),例如:

<input v-model="number" @blur="validateNumber">

data() {
  return {
    valid: false,
    number: "",
  };
},
methods: {
  validateNumber() {
    if (/^\d{9}$/.test(this.number)) {
      this.number = this.number.replace(/(\d{3})(\d{3})(\d{3})/, "$1.$2.$3");
      this.valid = true;
    } else if (/^(\d{3}\.){2}\d{3}$/.test(this.number)) {
      this.valid = true;
    } else {
      this.valid = false;
    }
  }
}

【讨论】:

  • 我认为这行不通,如果他们输入 123456789 它需要被屏蔽为 123.456.789,如果他们输入 123.456.789 应该没问题。我在这里想念如何在一组 3 个字符后添加点
  • 我添加了一种方法,当值为数字时可以将其屏蔽
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-26
  • 2019-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-18
相关资源
最近更新 更多