当前位置: 首页 > news >正文

对input输入框做日期输入限制的几种方法

用户输入一个日期的时候,我们如何对其做一个输入限制呢?试想一下,如果你输入一个13月份出来,直接弹框提醒你,会觉得冗余界面复杂,我们可以直接清掉这个3。此外,假如我们希望别人输入的日期格式如下:2024.01.12时,应该如何来规定呢?

QQ录屏20240112102820

首先,我们第一个想到的应该是使用正则来匹配

   const regex = /^\d{4}\.\d{2}\.\d{2}$/;

除了正则外,想达到一个边输入边验证输入是否合法的效果,使用事件和监听来做。

1.首先写一个input输入框,v-model绑定一个值,对input使用@input事件。

 <el-input v-model="baseData.recTime"  placeholder="不填写则为系统默认时间"@input="validateAndFormatDateInput"></el-input>

 2.判断哪些位是小数点,哪些位是数字,当然这儿我限制的并不完全,比如说第九位不能大于3,第九位为3时,第十位不能大于1。这里只是给大家做一个参考:

 validateAndFormatDateInput() {// 获取输入框的值let inputValue = this.baseData.recTime || '';// 一边输入一边判断if ((inputValue.length === 5 && inputValue[4] !== '.') ||  // 第五位不是小数点(inputValue.length === 8 && inputValue[7] !== '.') ||  // 第八位不是小数点(inputValue.length === 1 && isNaN(parseInt(inputValue[0]))) ||// 第一位不是数字(inputValue.length === 2 && isNaN(parseInt(inputValue[1]))) ||(inputValue.length === 3 && isNaN(parseInt(inputValue[2]))) ||(inputValue.length === 4 && isNaN(parseInt(inputValue[3]))) ||(inputValue.length === 6 && parseInt(inputValue[5]) > 1) ||  // 第六位大于1(inputValue.length === 9 && parseInt(inputValue[8]) > 3)  // 第九位大于3) {// 不符合条件,移除最后输入的字符this.baseData.recTime = inputValue.slice(0, -1);}// 只保留符合格式的字符this.baseData.recTime = this.baseData.recTime.replace(/[^\d.]/g, '');}

 除此外使用watch来监听:

 "baseData.recTime": {handler(newVal, oldVal) {console.log(newVal, oldVal);if ((oldVal + "").length > (newVal + "").length) {return;}clearTimeout(this.watchTimer);this.watchTimer = setTimeout(() => {this.baseData.recTime = newVal.replace(/[^\d\.\s]/g, "");let _value = newVal.replace(/[^\d.]/g, "") + ""; //去掉除开数字和小数点console.log(_value);this.baseData.recTime = _value;if (_value == 0) {this.baseData.recTime = "";return;}if (_value.length <= 4) {let _len = _value.length;if ((_value.replace(/\D/g, "") + "").length != _len) {this.baseData.recTime = _value.replace(/\D/g, "");return;}if (_value.length == 4) {this.baseData.recTime = _value + ".";}}if (_value.length > 4) {let _stepValue1 = _value.slice(0, 4);let _len = _stepValue1.length;if ((_stepValue1.replace(/\D/g, "") + "").length != _len) {this.baseData.recTime = _stepValue1.replace(/\D/g, "");return;}if (_value.length == 5) {if (_value[4] != ".") {this.baseData.recTime = _value.slice(0, 4);return;}}if (_value.length > 5) {if (_value[5] != "1" && _value[5] != "0") {this.baseData.recTime = _value.slice(0, 5);return;}if (parseInt(_value[6]) > 2 && _value[5] == "1") {this.baseData.recTime = _value.slice(0, 6);return;}if (_value.length > 7) {this.baseData.recTime = _value.slice(0, 7);return;}}}}, 100);},immediate: false,deep: true},

相关文章:

  • 五、带登录窗体的demo
  • 使用emu8086实现——分支结构程序设计
  • 41k+ stars 闪电般快速的开源搜索引擎 docker安装教程
  • Oracle数据库学习入门教程
  • Intel Quick Sync Video(QSV)(快速视频同步)介绍
  • thinkphp学习09-数据库的数据新增
  • 面试 React 框架八股文十问十答第二期
  • 【电源专题】案例:不同的充电芯片在没插入电池但插入USB充电器情况下为什么无法兼容?
  • 计算机网络夯实之路-HTTP详解
  • 微服务治理:微服务断路器(微服务故障隔离模式)详解
  • 阿里云国际服务器设置安全防护程序
  • 阿里云提示服务器ip暴露该怎么办?-速盾网络(sudun)
  • 如何激活数据要素价值
  • LeetCode 36. 有效的数独
  • Docker的基本管理
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • @jsonView过滤属性
  • Android系统模拟器绘制实现概述
  • canvas 绘制双线技巧
  • Git 使用集
  • go append函数以及写入
  • React as a UI Runtime(五、列表)
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 深入浏览器事件循环的本质
  • 小而合理的前端理论:rscss和rsjs
  • 学习ES6 变量的解构赋值
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 找一份好的前端工作,起点很重要
  • Android开发者必备:推荐一款助力开发的开源APP
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​虚拟化系列介绍(十)
  • (003)SlickEdit Unity的补全
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (生成器)yield与(迭代器)generator
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • **CI中自动类加载的用法总结
  • .net Stream篇(六)
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .NET8 动态添加定时任务(CRON Expression, Whatever)
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • @RequestBody与@ModelAttribute
  • [ Linux Audio 篇 ] 音频开发入门基础知识
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [2009][note]构成理想导体超材料的有源THz欺骗表面等离子激元开关——
  • [Android] Upload package to device fails #2720
  • [android] 看博客学习hashCode()和equals()
  • [APUE]进程关系(下)
  • [C# 基础知识系列]专题十六:Linq介绍
  • [C#]使用PaddleInference图片旋转四种角度检测
  • [C][栈帧]详细讲解