首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在vue js中使用number和regex进行验证?

如何在vue js中使用number和regex进行验证?
EN

Stack Overflow用户
提问于 2019-07-30 14:57:36
回答 2查看 18K关注 0票数 3

我必须验证文本框只接受数值和数字必须以7或8或9(正则表达式)开头。

我已经做了maxlength,minlength和required规则。它们工作得很好。但我不知道如何验证只接受数字和正则表达式。我已经尝试了一些语法,但不起作用。

代码语言:javascript
复制
<tab-content title="RELATIONSHIP DETAILS" icon="ti-info-alt" :before-change="validateFirstStep">
<el-form :inline="true" :model="formInline1" class="demo-form-inline" :rules="rules1" ref="ruleForm1">
<el-form-item label="Mobile Number" prop="mobno">
          <el-input maxlength="10" v-model="formInline1.mobno" placeholder="Mobile Number"></el-input>
        </el-form-item>

</el-form>

    </tab-content>

<script>
const app= new Vue({
   el: '#app',
     data() {
       return {
         formInline1: {
mobno:'',
},
         rules1: {
 mobno: [{
             required: true,
             message: 'Please enter Mobile Number',
             trigger: 'blur'
           }, {
             min: 10,
             max: 10,
             message: 'Length must be 10',
             trigger: 'blur'
           }],
}
       },
       methods: {
         onComplete: function() {
           alert('Yay. Done!');
         },
validateFirstStep() {
           return new Promise((resolve, reject) => {
             this.$refs.ruleForm1.validate((valid) => {
               resolve(valid);
             });
           })
         },
}
  })
</script>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-30 15:13:08

验证规则如下所示:

代码语言:javascript
复制
{
  trigger: 'blur',
  validator (rule, value, callback) {
    if (/^[789]\d{9}$/.test(value)) {
      callback();
    } else {
      callback(new Error('Mobile number must be 10 digits starting 7, 8 or 9'));
    }
  }
}

调用不带参数的回调表示成功,调用错误表示验证失败。

RegExp检查7、8或9,后跟9个其他数字。没有严格的必要精确,因为已经有一个验证规则来检查总共10个字符。例如,如果我们知道有10个字符,/^[789]\d*$/也会起作用。

在实践中,最好将其分成两部分,一部分确认所有数字都是数字,另一部分检查第一个数字是7、8或9。这将允许在两种情况下显示不同的错误消息。

下面是一个完整的示例:

代码语言:javascript
复制
const app = new Vue({
  el: '#app',

  data () {
    return {
      formInline1: {
        mobno: '',
      },
      rules1: {
        mobno: [{
          required: true,
          message: 'Please enter Mobile Number',
          trigger: 'blur'
        }, {
          min: 10,
          max: 10,
          message: 'Length must be 10',
          trigger: 'blur'
        }, {
          trigger: 'blur',
          validator (rule, value, callback) {
            if (/^[789]\d{9}$/.test(value)) {
              callback();
            } else {
              callback(new Error('Mobile number must be 10 digits starting 7, 8 or 9'));
            }
          }
        }]
      }
    }
  }
});
代码语言:javascript
复制
<link rel="stylesheet" href="https://unpkg.com/element-ui@2.10.1/lib/theme-chalk/index.css">
<script src="https://unpkg.com/vue@2.6.10/dist/vue.js"></script>
<script src="https://unpkg.com/element-ui@2.10.1/lib/index.js"></script>
<div id="app">
  <el-form :inline="true" :model="formInline1" :rules="rules1">
    <el-form-item label="Mobile Number" prop="mobno">
      <el-input maxlength="10" v-model="formInline1.mobno" placeholder="Mobile Number"></el-input>
    </el-form-item>
  </el-form>
</div>

更新:

以下是两种情况下的单独消息示例:

代码语言:javascript
复制
if (/\D/.test(value)) {
  callback(new Error('Must all be numbers'));
} else if (!/^[789]/.test(value)) {
  callback(new Error('Must start 7, 8 or 9'));
} else {
  callback();
}

您甚至可以进一步将它们划分为两个单独的验证器,但只有当您需要重用其中一个验证器时,这才可能有用。

进一步更新:

元素似乎使用async-validator进行验证,所以我们可以使用pattern而不是自定义的validator

代码语言:javascript
复制
const app = new Vue({
  el: '#app',

  data () {
    return {
      formInline1: {
        mobno: '',
      },
      rules1: {
        mobno: [{
          required: true,
          message: 'Please enter Mobile Number',
          trigger: 'blur'
        }, {
          min: 10,
          max: 10,
          message: 'Length must be 10',
          trigger: 'blur'
        }, {
          pattern: /^\d*$/,
          message: 'Must be all numbers',
          trigger: 'blur'
        }, {
          pattern: /^[789]/,
          message: 'Must start 7, 8 or 9',
          trigger: 'blur'
        }]
      }
    }
  }
});
代码语言:javascript
复制
<link rel="stylesheet" href="https://unpkg.com/element-ui@2.10.1/lib/theme-chalk/index.css">
<script src="https://unpkg.com/vue@2.6.10/dist/vue.js"></script>
<script src="https://unpkg.com/element-ui@2.10.1/lib/index.js"></script>
<div id="app">
  <el-form :inline="true" :model="formInline1" :rules="rules1">
    <el-form-item label="Mobile Number" prop="mobno">
      <el-input maxlength="10" v-model="formInline1.mobno" placeholder="Mobile Number"></el-input>
    </el-form-item>
  </el-form>
</div>

票数 5
EN

Stack Overflow用户

发布于 2019-07-30 15:03:02

如果你需要匹配任何10位数字,以7,8或9开头,那么你可以使用类似这样的东西:^[7-9]\d{9}$ (示例here)。

这将匹配任何以7、8或9开头的数字,后面跟着9个其他数字。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57265963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档