玩转vue判断快递单号是否符合规则

Posted 光仔December

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了玩转vue判断快递单号是否符合规则相关的知识,希望对你有一定的参考价值。

今天有粉丝问我如何判断用户输入的快递单号是否正确:

我先是给童鞋提供了思路,但是转念一想诚意不够,我就花了点时间写了个小demo,有点粗糙,但是可以给大家提供一些思路,demo工程下载地址:vue判断输入的快递单号是否符合规则Demo-Javascript文档类资源-CSDN下载(大神门可以绕道了,轻喷T_T),

再捋一下思路:

1、为快递公司select控件设置change事件,当selelct控件的值发生变化时,触发change事件,然后获取select的值保存起来(如果快递单号此时有值,直接进行选中的快递公司的格式判断)
2、然后快递单号值也写个change事件,如果快递单号发生变化,获取之前保存的快递公司select的值,判断快递单号的格式(此时必须要求用户先选择快递公司,没有就报错)
3、判断快递单号的逻辑是一个公共方法,判断的正则表达式可以自己定义,也可以从公共接口获取。

主体代码:

<template>
  <div>
    <el-form class="check_form">
      <el-form-item label="快递公司:" prop="kd_type">
        <el-select v-model="kdType" placeholder="请选择" 
        class="select_style" @change="kdTypeChange">
          <el-option
            v-for="item in options"
            :key="item.value"
            :label="item.label"
            :value="item.value">
          </el-option>
        </el-select>
      </el-form-item>
      <!-- 符合条件的测试单号:1200878623037 -->
      <el-form-item label="快递单号:" prop="kd_no">
        <el-input v-model="kdNo" @change="kdNoChange"></el-input>
      </el-form-item>
    </el-form>
  </div>
</template>

<script>
export default 
  name: 'HelloWorld',
  data () 
    return 
      options: [
          value: 1,
          label: '韵达快递'
        , 
          value: 2,
          label: '圆通速递'
        , 
          value: 3,
          label: '顺丰速运'
        ],
        kdType: '',
        kdNo:'',
        //校验快递单号格式的正则表达式
        regArry:['^(10|11|12|13|14|15|16|17|19|18|50|55|58|80|88|66|31|77|39)[0-9]11$|^[0-9]13$',
        '^[A-Za-z0-9]2[0-9]10$|^[A-Za-z0-9]2[0-9]8$|^[6-9][0-9]17$|^[DD]2[8-9][0-9]15$|^[Y][0-9]12$',
        '^[A-Za-z0-9-]4,35$']
    
  ,
  methods:
    kdTypeChange()
      //先校验快递单号是不是为空
      if(this.kdNo==''||this.kdNo==null)
        return this.$message.error("请输入快递单号!");
      
      //如果快递公司和单号都不为空,开始校验单号格式
      this.checkNoPattern(this.kdType,this.kdNo);
    ,
    kdNoChange()
      //先校验快递公司是不是为空
      if(this.kdType==''||this.kdType==null)
        return this.$message.error("请选择快递公司!");
      
      //如果快递公司和单号都不为空,开始校验单号格式
      this.checkNoPattern(this.kdType,this.kdNo);
    ,
    checkNoPattern(kdType_v,kdNo_v)
      console.log(kdType_v)
      let type_v = '';
      let result = false;
      let reg = '';
      switch (kdType_v)
      
        case 1: //韵达快递
            type_v = '韵达快递';
            reg=this.regArry[0];   /*定义验证表达式*/
            break;
        case 2: //圆通速递
            type_v = '圆通速递';
            reg=this.regArry[1];   /*定义验证表达式*/
            break;
        case 3: //顺丰速运
            type_v = '顺丰速运';
            reg=this.regArry[2];   /*定义验证表达式*/
            break;
        default: return this.$message.error("没有匹配公式!");
      
      let regObject = new RegExp(reg); //按照规则新建正则表达式对象
      result = regObject.test(kdNo_v);     /*进行验证*/
      if(result)
        //结果是true,则符合表达式格式,快递单号合法
        return this.$message.success("快递单符合"+type_v+"公司格式!");
      else
        //结果是false,则不符合表达式格式,快递单号非法
        return this.$message.error("快递单不符合"+type_v+"公司格式!");
      
    
  

</script>


<style scoped>
.check_form
  position: absolute;
  width: 30%;

.select_style
  width: 70%;

</style>

效果: 希望可以给这位童鞋一点有用的思路^_^

以上是关于玩转vue判断快递单号是否符合规则的主要内容,如果未能解决你的问题,请参考以下文章

SHOPEX快递单号查询插件圆通V8.2专版

ECSHOP快递单号查询插件圆通V8.2专版

单号spsgcn+9位数字,是哪个快递?

ECSHOP快递物流单号查询插件

SHOPEX快递物流单号查询插件

ECSHOP和SHOPEX快递单号查询中通插件V8.6专版