el-form表单添加自定义校验(非必选情况)

  1. 最近遇到一些校验,显然el-form官方的rules校验满足不了我的需求,仅以此篇来帮助和我一样遇到这样需求的同学。
  2. 话不多说直接看代码
  3. validate是对整个表单进行校验的方法

    validateField第一个参数是数组或字符串,第二个参数是回调函数,回调函数有值则表示错误

  4. 使用示例(Example)

    1. 在template中使用  

      <el-form
                  :model="numberValidateForm"
                  ref="numberValidateForm"
                  label-width="100px"
                  class="demo-ruleForm"
                  :rules="rules"
              >
                  <el-form-item label="年龄(自定义)" prop="age">
                      <el-input type="age" v-model="numberValidateForm.age" autocomplete="off"></el-input>
                  </el-form-item>
                  <el-form-item label="文件(自定义)" prop="path">
                      <el-input v-model="numberValidateForm.path" maxlength="10" autocomplete="off"></el-input>
                  </el-form-item>
                  <el-form-item>
                      <el-button type="primary" @click="submitForm('numberValidateForm')">提交</el-button>
                      <el-button @click="resetForm('numberValidateForm')">重置</el-button>
                  </el-form-item>
              </el-form>
    2.  validator必须定义在data和return之间

      data() {
              var customize = (rule, value, callback) => {
                  var result = /^[a-zA-Z0-9\u4e00-\u9fa5\,,。@#&*]+$/;//字母数字和汉字和特殊符号
                  if (!value) {
                      // return callback(new Error('值不能为空')) // 可以判断为空提示
                      callback()    // 如果为空直接跳过
                  } else {
                      if (value.length >= 6 && value.length <= 10) {
                          setTimeout(() => {
                              if (result.test(value)) {
                                  callback()
                              } else {
                                  return callback(new Error('输入正确的值'))
                              }
                          }, 100);
                      } else {
                          return callback(new Error('输入的值必须在6~10位'))
                      }
      
                  }
      
              };
              var customizeFile = (rule, value, callback) => {
                  const result = /^[A-Za-z0-9\.,。@#~%&*"":;]/ // 字母、数字、特殊符号  
                  if (!value) {
                      // return callback(new Error('值不能为空')) // 可以判断为空提示
                      callback()  // 如果为空直接跳过
                  }
                  setTimeout(() => {
                      if (result.test(value)) {
                          callback()
                      } else {
                          return callback(new Error('输入正确的值'))
                      }
                  }, 100);
              };
              return {
                  numberValidateForm: {
                      age: '',
                      path: ''
                  },
                  rules: {
                      age: [{ validator: customize, trigger: 'blur' }],
                      path: [{ validator: customizeFile, trigger: 'blur' }]
                  },
                  value: []
              }
          },
    3.  methods中定义提交和重置方法

      methods: {
              submitForm(formName) {
                  this.$refs[formName].validate((valid) => {
                      if (valid) {
                          alert('submit!');
                      } else {
                          console.log('error submit!!');
                          return false;
                      }
                  });
              },
              resetForm(formName) {
                  this.$refs[formName].resetFields();
              }
          }
  5. 其他的几种校验格式

    const result = /^1(3|4|5|6|7|8|9)\d{9}$/;    // 手机号
    const result = /^[A-Za-z0-9\u4e00-\u9fa5]+$/ // 字母数字和汉字 
    const result =/^[a-zA-Z0-9\u4e00-\u9fa5\,,。@#&*]+$/;//字母数字和汉字和特殊符号
    const result = /^[A-Za-z0-9\.,。@#~%&*"":;]/ // 字母、数字、特殊符号 
    const result = /^(?=.*\d)(?=.*[a-zA-Z])(?=.*[@#~%&*"":;])[\da-zA-Z@#~%&*"":;]{0,5}$/ //输入数字字母特殊符号 {0,5}是最小限制和最大限制 
    const result = /^(?=.*[0-9])+|((?=.*[a-z])[0-9a-z]+|(?=.*[!@#$%^&*])(?=.*[a-z])+|(?=.*[a-z])+|(?=.*[!@#$%^&*])+|(?=.*[!@#$%^&*])(?=.*[a-z])(?=.*[0-9])+|(?=.*[!@#$%^&*])[0-9!@#$%^&*]+)$/ig;  //数字 字母+数字 特殊符号+字母 字母 特殊符号 特殊符号+数字 特殊符号+字母+数字
    
    //ipv4和ipv6的正则校验
    
    
    //ipv4校验
    function isIPV4ValidIP(ip) {
        var v4reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/
        return v4reg.test(ip);
    } 
    
    //ipv6校验
    function isIPV6ValidIP(ip) {
        var v6reg = /^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/gm;       
        return v6reg.test(ip);
    } 
    
    //ip校验
    function isIPValid(ip) {
       return isIPV6ValidIP(ip)&&isIPV4ValidIP(ip)
    }
    
    const result = /^(?=.*[0-9])+|((?=.*[a-z])[0-9a-z]+|(?=.*[!@#$%^&*])(?=.*[a-z])+|(?=.*[a-z])+|(?=.*[!@#$%^&*])+|(?=.*[!@#$%^&*])(?=.*[a-z])(?=.*[0-9])+|(?=.*[!@#$%^&*])[0-9!@#$%^&*]+)$/ig  //数字 字母+数字 特殊符号+字母 字母 特殊符号 特殊符号+数字 特殊符号+字母+数字
    

  6. 今天的自定义校验就到这里,欢迎评论加留言

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
el-form表单验证中,如果需要进行数字校验,可以使用rules属性来定义校验规则。根据引用\[1\]中的代码示例,可以在rules对象中添加一个数字校验规则。例如: ```javascript const rules = { name: \[ { required: true, message: '请输入姓名', trigger: 'blur' }, { type: 'number', message: '请输入数字', trigger: 'blur' } \], desc: \[ { required: true, message: '请输入退回原因', trigger: 'blur' }, { type: 'number', message: '请输入数字', trigger: 'blur' } \] }; ``` 在上述代码中,我们为name和desc字段添加了一个type为'number'的校验规则,用于验证输入的值是否为数字。当输入的值不是数字时,会显示"请输入数字"的错误提示信息。 另外,根据引用\[2\]中的代码示例,可以在提交表单时调用validateField方法来触发表单项的校验。例如: ```javascript const ruleFormValidate = async (ref) => { await ref.validateField('tagList'); }; ``` 在上述代码中,我们调用validateField方法来校验名为tagList的表单项。 综上所述,你可以通过在rules中添加type为'number'的校验规则来实现el-form表单的数字校验。同时,在提交表单时,可以调用validateField方法来触发表单项的校验。 #### 引用[.reference_title] - *1* [el-form表单新增表单项动态校验el-form校验动态表单v-if不生效;](https://blog.csdn.net/i_am_a_div/article/details/125544267)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [vue3 el-form表单验证 自定义校验](https://blog.csdn.net/a965412234/article/details/119212016)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值