表单验证、正则表达式---最大限制9999.99

本文详细介绍了在前端开发中如何实现各种表单字段的验证,包括巷道名称、巷道长度等,涉及字符限制、特殊字符检查及数字格式校验。同时,给出了完整的Vue.js组件代码示例,展示了如何结合 Vuex 进行数据管理,并提供了一个用于编辑设备信息的表单组件。该组件包含了月份选择、巷道信息、长度限制等关键字段的输入与验证,确保了数据输入的准确性和规范性。
摘要由CSDN通过智能技术生成

在这里插入图片描述

可输入汉字、英文、数字,最多30个字符(不包含特殊字符)

systemType: [
  {
    type: "string",
    required: true,
    message: "请输入巷道名称",
    trigger: "change",
  },
  {
    min: 1,
    max: 30,
    message: "长度在 1 到 30 个字符",
    trigger: "change",
  },
  {
    required: true,
    message: "不能包含特殊字符",
    trigger: "change",
    pattern: /^[\u4E00-\u9FA5a-zA-Z0-9]{1,30}$/,
  },
],

可输入数字,小数点后保留2位,最大9999.99

{
 required: true,
 message: "请输入巷道长度",
 trigger: "change",
},
{
  required: true,
  message: "最多两位小数",
  trigger: "change",
  pattern:  /^(\d+)(.\d{0,2})?$/,
},
{
  required: true,
  message: "最大限制9999.99",
  trigger: "change",
  pattern: /^(([1-9]\d{0,3})|0)(\.\d{0,2})?$/,
},

可输入汉字、英文、数字、特殊符号,最多200个字符

 {
   type: "string",
    required: true,
    message: "请输入地质情况",
    trigger: "change",
  },
  {
    min: 1,
    max: 200,
    message: "长度在 1 到 200 个字符",
    trigger: "change",
  },

全部代码

<template>
  <div class="add-device-box" @click.self="close">
    <div class="add-device">
      <div class="head">{{ title }}</div>
      <div class="main">
        <el-form
          ref="ruleForm"
          label-width="110px"
          size="medium"
          :inline="true"
          :rules="rules"
          :model="paramsData"
          class="demo-form-inline"
        >
          <el-form-item
            label="月份"
            prop="sensorName"
            style="margin-right: 50px"
          >
            <el-date-picker
              v-model="paramsData.sensorName"
              type="month"
              placeholder="请选择月份"
            />
          </el-form-item>
          <el-form-item label="巷道名称" prop="systemType">
            <el-input
              v-model="paramsData.systemType"
              placeholder="请输入巷道名称"
            />
          </el-form-item>
          <el-form-item label="开始点位名称" prop="monitorType">
            <el-input
              v-model="paramsData.monitorType"
              placeholder="请输入开始点位名称"
            />
          </el-form-item>
          <el-form-item label="结束点位名称" prop="sensorIp">
            <el-input
              v-model="paramsData.sensorIp"
              placeholder="请输入结束点位名称"
            />
          </el-form-item>
          <el-form-item label="巷道长度" prop="sensorPosition">
            <el-input
              v-model="paramsData.sensorPosition"
              placeholder="请输入巷道长度"
              type="number"
            >
              <i slot="suffix" style="margin-right: 10px;color:#3370c2">m</i>
            </el-input>
          </el-form-item>
          <el-form-item label="设计长度" prop="workingFaceName">
            <el-input
              v-model="paramsData.workingFaceName"
              placeholder="请输入设计长度"
              type="number"
            >
              <i slot="suffix" style="margin-right: 10px;color:#3370c2">m</i>
            </el-input>
          </el-form-item>
          <el-form-item label="已施工长度" prop="department">
            <el-input
              v-model="paramsData.department"
              placeholder="请输入已施工长度"
              type="number"
            >
              <i slot="suffix" style="margin-right: 10px;color:#3370c2">m</i>
            </el-input>
          </el-form-item>
          <el-form-item label="剩余长度" prop="leader">
            <el-input
              v-model="paramsData.leader"
              placeholder="请输入剩余长度"
              type="number"
            >
              <i slot="suffix" style="margin-right: 10px;color:#3370c2">m</i>
            </el-input>
          </el-form-item>
          <el-form-item label="地质情况" prop="qk" class="inner">
            <el-input v-model="paramsData.qk" placeholder="请输入地质情况" />
          </el-form-item>
        </el-form>
      </div>
      <div class="footer">
        <button class="_confirm" @click="confirm('ruleForm')">确定</button>
        <span style="width: 40px" />
        <button class="_confirm" @click="close">取消</button>
      </div>
    </div>
  </div>
</template>

<script>
import { mapState } from "vuex";
import { getAllSystemTypes } from "@/api/monitor";
import moment from "moment";
import { getData, week } from "@/views/dispatch/common";
export default {
  props: {
    editdata: {
      type: Object,
      default: () => null,
    },
    workList: {
      type: Array,
      default: () => [],
    },
    title: {
      type: String,
      default: () => "编辑设备",
    },
  },
  data() {
    return {
      paramsData: {
        systemType: "",
        monitorType: "",
        sensorIp: "",
        workingFaceName: "",
        qk: "",
        sensorName: "",
      },
      value: "",
      list: [],
      monthList: [],
      getData,
      submit: false,
      userNameMsg: "",
      monitorTypesList: [],
      systemTypesList: [],
      workingFaceName: "",
      name: "",
      jobNumber: "",
      rules: {
        sensorName: [
          { required: true, message: "请选择月份", trigger: "change" },
        ],
        systemType: [
          {
            type: "string",
            required: true,
            message: "请输入巷道名称",
            trigger: "change",
          },
          {
            min: 1,
            max: 30,
            message: "长度在 1 到 30 个字符",
            trigger: "change",
          },
          {
            required: true,
            message: "不能包含特殊字符",
            trigger: "change",
            pattern: /^[\u4E00-\u9FA5a-zA-Z0-9]{1,30}$/,
          },
        ],
        monitorType: [
          {
            type: "string",
            required: true,
            message: "请输入开始点位名称",
            trigger: "change",
          },
          {
            min: 1,
            max: 20,
            message: "长度在 1 到 20 个字符",
            trigger: "change",
          },
          {
            required: true,
            message: "不能包含特殊字符",
            trigger: "change",
            pattern: /^[\u4E00-\u9FA5a-zA-Z0-9]{1,20}$/,
          },
        ],
        sensorIp: [
          {
            type: "string",
            required: true,
            message: "请输入结束点位名称",
            trigger: "change",
          },
          {
            min: 1,
            max: 20,
            message: "长度在 1 到 20 个字符",
            trigger: "change",
          },
          {
            required: true,
            message: "不能包含特殊字符",
            trigger: "change",
            pattern: /^[\u4E00-\u9FA5a-zA-Z0-9]{1,20}$/,
          },
        ],
        sensorPosition: [
          {
            required: true,
            message: "请输入巷道长度",
            trigger: "change",
          },
          {
            required: true,
            message: "最多两位小数",
            trigger: "change",
            pattern: /^(\d+)(.\d{0,2})?$/,
          },
          {
            required: true,
            message: "最大限制9999.99",
            trigger: "change",
            pattern: /^(([1-9]\d{0,3})|0)(\.\d{0,2})?$/,
          },
        ],
        workingFaceName: [
          {
            required: true,
            message: "请输入设计长度",
            trigger: "change",
          },
          {
            required: true,
            message: "最多两位小数",
            trigger: "change",
            pattern: /^(\d+)(.\d{0,2})?$/,
          },
          {
            required: true,
            message: "最大限制9999.99",
            trigger: "change",
            pattern: /^(([1-9]\d{0,3})|0)(\.\d{0,2})?$/,
          },
        ],
        department: [
          {
            required: true,
            message: "请输入已施工长度",
            trigger: "change",
          },
          {
            required: true,
            message: "最多两位小数",
            trigger: "change",
            pattern: /^(\d+)(.\d{0,2})?$/,
          },
          {
            required: true,
            message: "最大限制9999.99",
            trigger: "change",
            pattern: /^(([1-9]\d{0,3})|0)(\.\d{0,2})?$/,
          },
        ],
        leader: [
          {
            required: true,
            message: "请输入剩余长度",
            trigger: "change",
          },
          {
            required: true,
            message: "最多两位小数",
            trigger: "change",
            pattern: /^(\d+)(.\d{0,2})?$/,
          },
          {
            required: true,
            message: "最大限制9999.99",
            trigger: "change",
            pattern: /^(([1-9]\d{0,3})|0)(\.\d{0,2})?$/,
          },
        ],
        qk: [
          {
            type: "string",
            required: true,
            message: "请输入地质情况",
            trigger: "change",
          },
          {
            min: 1,
            max: 200,
            message: "长度在 1 到 200 个字符",
            trigger: "change",
          },
        ],
      },
    };
  },
  computed: {
    ...mapState("settings", ["workingList"]),
    roleList() {
      return this.rolelist.slice(1);
    },
  },
  mounted() {
    this.paramsData = { ...this.paramsData, ...this.editdata };
    console.log(this.paramsData);
    this.getTypes();
  },
  created() {
    // this.paramsData.sensorName = new Date();
  },
  methods: {
    close() {
      this.$emit("closeAdd");
    },
    // querySearch(queryString, cb) {
    //   // debugger
    //   var restaurants = this.systemTypesList;
    //   var results = queryString
    //     ? restaurants.filter(this.createFilter(queryString))
    //     : restaurants;
    //   // 调用 callback 返回建议列表的数据
    //   cb(results);
    // },
    createFilter(queryString) {
      return (restaurant) => {
        return (
          restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) ===
          0
        );
      };
    },
    async getTypes() {
      const data1 = await getAllSystemTypes();
      const systemData = data1.data;
      const arr = [];
      systemData.forEach((item) => {
        arr.push({ value: item });
      });
      // const data2 = await getMonitorTypes()
      this.systemTypesList = arr;
      console.log(this.systemTypesList);
      // this.monitorTypesList = data2.data
      // console.log(data1, data2)
    },
    changeUser(e, key) {},
    confirm(formName) {
      this.$refs[formName].validate((valid) => {
        if (valid) {
          if (this.editdata && this.editdata.id) {
            this.paramsData.id = this.editdata.id;
          }

          this.$emit("sendData", this.paramsData);
        } else {
          console.log("error submit!!");
          return false;
        }
      });
    },
  },
};
</script>

<style lang="scss" scoped>
.add-device-box {
  width: 100%;
  height: 100%;
  background: rgba(0, 0, 0, 0.7);
  position: fixed;
  top: 0;
  left: 0;
  display: flex;
  justify-content: center;
  align-items: center;
  z-index: 999;
}
.add-device {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  width: 800px;
  background: url("../../../assets/setting_image/confirm_bg.png");
  background-size: 100% 100%;
  position: relative;
  // background-color: rgba(17, 24, 59, 0.8);
  .head {
    height: 95px;
    font-size: 28px;
    color: #6dc9ff;
    font-weight: 550;
    display: flex;
    justify-content: center;
    align-items: center;
    // border-bottom: 1px solid #142660;
  }
  .main {
    padding: 20px;
    width: 100%;
  }
  .footer {
    width: 100%;
    // padding: 20px 0;
    margin-bottom: 30px;
    display: flex;
    justify-content: center;
    align-items: center;
  }
}
.inner {
  ::v-deep .el-input__inner {
    width: 640px;
  }
}
::v-deep .el-input__inner {
  font-size: 12px !important;
  // height: 45px;
  width: 260px;
  // background: #11194F;
}
::v-deep .redColor .el-input__inner {
  border-color: red;
}
::v-depp .is-checked .el-checkbox__label {
  color: #fff;
}
::v-depp .el-checkbox__inner {
  width: 22px;
  height: 22px;
}

::v-deep input::-webkit-outer-spin-button,
::v-deep input::-webkit-inner-spin-button {
-webkit-appearance: none !important;
}
::v-deep input[type="number"] {
-moz-appearance: textfield !important;
}
</style>

在这里插入图片描述

修正长度中可以输入加减号的bug问题

{
	required:true,
	message:'仅支持输入数字',
	trigger:'change',
	pattern:/^[\d\.]+$/,   // 只能输入数字,除小数点之外其他的都默认是特殊字符
}
大于等于0小于等于100的正数用正则表达式表示
可以有小数:^100$|^(\d|[1-9]\d)(\.\d+)*$

不可以有小数:^100$|^(\d|[1-9]\d)$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值