logo

常用正则之


prtyaa
prtyaa 2023-12-26 18:43:45 21329
分类专栏: 资讯

整数0到99999正则

XXXXX-XXXXX正则

正整数正则

保留两位小数正则(含0和不含0)

0到1的正则

诸位看官上午好,我们前端在做项目的过程中,常常遇到一些input框检验,比如限制用户不能乱输入内容。方式有很多种,咋办啊?此时,若能善用正则,或许会事半功倍,那么,什么是正则呢?

所谓正则我的理解,就是一个前人封装好的对象,此对象自带属性和方法,我们常用的用来校验的就是正则的test方法,根据是否符合条件返回布尔值,可用于判别用户是否在乱输入内容。

话不多说,上代码!

html部分

  <div id="app">
    正数正则 保留两位(包括0)<el-input v-model.trim="num0" @change="check0" size="mini"></el-input>
    正数正则 保留两位(不包括0)<el-input v-model.trim="num1" @change="check1" size="mini"></el-input>
    正整数 (不包括0)<el-input v-model.trim="num2" @change="check2" size="mini"></el-input>
    折扣 (0-1] 的小数<el-input v-model.trim="num3" @change="check3" size="mini"></el-input>
    折扣 (0-1) 的小数<el-input v-model.trim="num4" @change="check4" size="mini"></el-input>
    整数 [0,99999]<el-input v-model.trim="num5" @change="check5" size="mini"></el-input>
    XXXXX-XXXXX正则<el-input v-model.trim="num6" @change="check6" size="mini"></el-input>
  </div>

js部分

export default {
  name: "app",
  data() {
    return {
      /* 总结:对应正则表达式而言,基本上可以帮我们匹配到合适的效果
         但是有些情况下。正则匹配的不够用,需要我们手动转换判断控制一下 */
      num0: "",
      num1:"",
      num2:"",
      num3:"",
      num4:"",
      num5:"",
      num6:"",
    };
  },
  methods: {
    // 正数正则 保留两位(包括0)
    check0() {
      let reg = /^((0{1}\.\d{1,2})|([1-9]\d*\.\d{1,2})|([1-9]+\d*)|0)$/;
      /* 输入的内容可分为以下情况
            1. 值为0
            2. 值为非0
                2.1 非0但是是数字
                  2.1.1 非0是数字,但是保留两位小数就为0.00了
                  2.1.2 非0是数字,保留两位小数仍不为0
                2.2 非0但是不是数字
            非数字类型的转化后就变成NaN了,正则检查NaN就为false,所以也是直接不符合
     */
      // 因为用户可能输入0或0.000000这样形式的数据,故此情景直接转换为0即可
      if (Number(this.num0) == 0) {
        this.num0 = 0;
      }
      // 如果用户输入的不是0,再看看是数字还是不是数字
      else {
        // 如果是数字,且处理后保留两位小数符合正则
        if (reg.test(parseFloat((this.num0 * 1.0).toFixed(2)))) {
          // 若用户输入0.0003保留两位小数就变成了0.00了,故此时就让其显示为0即可
          if((this.num0 * 1).toFixed(2) == 0){
            this.num0 = 0
          }else{
            this.num0 = (this.num0 * 1).toFixed(2);
          }
        }
        // 不符合的情况就是用户输入非数字
        else {
          console.log("不符合");
          this.num0 = "";
        }
      }
    },
    // 整数正则 保留两位(不包括0)
    check1(){
      let reg = /^((0{1}\.\d{1,2})|([1-9]\d*\.{1}\d{1,2})|([1-9]+\d*))$/
      if(reg.test(this.num1*1)){
        console.log("符合");
      }
      // 这样的写法就比较严格,只要不是两位小数,就直接清空
      else{
        console.log("不符合");
        this.num1 = ""
      }
    },
    // 正整数 (不包括0)
    check2(){
      let reg = /^[1-9]\d*$/
      if(reg.test(this.num2*1)){
        console.log("符合要求");
      }else{
        console.log("不符合要求");
        this.num2 = ""
      }
    },
    // 折扣(0,1]小数
    check3(){
      let reg = /^(0\.\d+|1)$/
      if(reg.test(this.num3*1)){
        console.log("符合要求");
      }else{
        console.log("不符合要求");
        this.num3 = ""
      }
    },
    // 折扣(0,1)小数
    check4(){
      let reg = /^(0\.\d+)$/
      if(reg.test(this.num4*1)){
        console.log("符合要求");
      }else{
        console.log("不符合要求");
        this.num4 = ""
      }
    },
    // [0,99999] 正整数
    check5(){
      // console.log(this.num5*1);
      // 下面的这个正则表达式的确可以匹配 [0,99999] 的正整数,但是存在一个BUG
      // 就是也会匹配到 01 002 0156 等 类似这样的数,所以需要我们转换一下
      let reg = /^(0|\+?[1-9][0-9]{0,4})$/
      if(reg.test(this.num5*1)){
        console.log("符合要求");
        // 字符串 0020 乘以 1 的话,结果是 20 就把字符串转数字了
        this.num5 = this.num5*1 + "" // 最后再转回来数字方便传后台
      }else{
        console.log("不符合要求");
        this.num5 = ""
      }
    },
    // XXXXX-XXXXX或XXX&XXXX等相似的产品编号形式的正则
    check6(){
      let reg1 =  /^([0-9]{5})-([0-9]{5})$/
      let reg2 =  /^([0-9]{3})&([0-9]{4})$/
      if(reg1.test(this.num6) | reg2.test(this.num6)){
        console.log("符合要求");
      }else{
        console.log("不符合要求");
        this.num6 = ""
      }
    }
  },
};

总结

有些时候,用正则可以搞定大多数的情况,不过有的时候正则又会比较死板,再结合js的一些常用的小技巧,就可以实现了input框框的校验控制啦。

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:http://www.xckfsq.com/news/show.html?id=31038
赞同 0
评论 0 条
prtyaa
粉丝 1 发表 2553 + 关注 私信
上周热门
10核GPU竟变9核,苹果暗改新iPad Air官网M2芯片规格  3851
统一管理、安全运维、全面审计 | 北信源安全运维审计系统“一站式服务”  3849
行业认可 | 中电安科入选嘶吼《工控安全行业应用专题报告》「荐」行者名单及全景图谱多个细分领域  3649
明天!2024 RT-Thread全球技术大会 国内场最后一天,超多惊喜放送,等你来!  3424
百信与山西建投集团举行工作会谈  3361
152万奖金池!昇腾AI创新大赛昇思模型开发挑战赛正式发布!  3246
永中“文韵”大模型获2024数字中国创新大赛·人工智能赛道三等奖  3243
国务院关于修改《国家科学技术奖励条例》的决定  3235
神州泰岳入选创业板指和创业板50指数  3063
“走进高校” 系列活动之专题讲座第14期,期待您的参与!  3062
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
如何玩转信创开放社区—从小白进阶到专家 15
信创开放社区邀请他人注册的具体步骤如下 15
方德桌面操作系统 14
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
我有15积分有什么用? 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
信创再发力!中央国家机关台式计算机、便携式计算机批量集中采购配置标准的通知 8