最近有一个需求需要校验输入的身份证有效期的开始和结束日期,

由于是没有使用日期选择框,是直接文本录入的,

因此需要对录入的内容做一些校验,

废话不多说,直接上代码

      let idCardPeriodDate = this.checkIdCardPeriodDate(this.state.idCardPeriodDate);if(!idCardPeriodDate){return;}// 校验通过this.setState({idCardPeriodDate: idCardPeriodDate.replace("至", " 至 "),});

校验的方法就在这里:

  checkIdCardPeriodDate(value){console.log(value);if (checkNull(value, '身份证有效期')) {return false;}let idCardPeriodDate = value.replaceAll(" ", "").replaceAll(" ", "").replaceAll("•", "").replaceAll(".", "").replaceAll("-", "").replaceAll("_", "").replaceAll("/", "").replaceAll("永久", "长期");// 替换后再校验一遍if (checkNull(idCardPeriodDate, '身份证有效期')) {return false;}if(idCardPeriodDate.indexOf("至") <0 ){// 没有至message.destroy();message.error("【身份证有效期】格式必须为【YYYYMMDD 至 YYYYMMDD】");return false;}if(clearAllNoChineseChar(idCardPeriodDate).replaceAll("长期","").length > 1){// 有两个以及以上汉字message.destroy();message.error("【身份证有效期】格式必须为【YYYYMMDD 至 YYYYMMDD】");return false;}if(idCardPeriodDate.indexOf("至") === 0 || idCardPeriodDate.indexOf("至") === (idCardPeriodDate.length -1)){// 至在第一或者最后一位message.destroy();message.error("【身份证有效期】格式必须为【YYYYMMDD 至 YYYYMMDD】");return false;}let startIdDate = idCardPeriodDate.split("至")[0];let endIdDate = idCardPeriodDate.split("至")[1];console.log("startIdDate", startIdDate);console.log("endIdDate", endIdDate);console.log("parse", Date.parse(startIdDate.substring(0,4)+"-"+startIdDate.substring(4,6)+"-"+startIdDate.substring(6,8)));// 校验前半部分if(startIdDate.length !==8){message.destroy();message.error("【身份证有效期】开始日期必须为【YYYYMMDD】格式");return false;}if(isNaN(Date.parse(startIdDate.substring(0,4)+"-"+startIdDate.substring(4,6)+"-"+startIdDate.substring(6,8)))){message.destroy();message.error("【身份证有效期】开始日期有误");return false;}// 校验后半部分if(endIdDate !== '长期' && endIdDate.length !==8){message.destroy();message.error("【身份证有效期】结束日期必须为【YYYYMMDD】格式");return false;}if(endIdDate !== '长期' && isNaN(Date.parse(endIdDate.substring(0,4)+"-"+endIdDate.substring(4,6)+"-"+endIdDate.substring(6,8)))){message.destroy();message.error("【身份证有效期】结束日期有误");return false;}if(endIdDate !== '长期' && startIdDate >= endIdDate){message.destroy();message.error("【身份证有效期】开始日期必须大于开始日期");return false;}let nowDate = getDate();if(startIdDate > nowDate){message.destroy();message.error("【身份证有效期】开始日期不可大于【"+nowDate+"】");return false;}if(endIdDate !== '长期' && nowDate >= endIdDate){message.destroy();message.error("【身份证有效期】结束日期必须大于【"+nowDate+"】");return false;}return idCardPeriodDate;}
export const getDate = function() {const date = new Date(); // 获取时间const year = date.getFullYear(); // 获取年const month = date.getMonth() + 1; // 获取月const strDate = date.getDate(); // 获取日return year + getNum(month) + getNum(strDate);
};
export const getNum = function(i) {return i < 10 ? '0' + i : i
};

结束

史上最好用的校验【身份证有效期】的JS方法相关推荐

  1. 史上最详细的使用canvas绘制五星红旗的方法

    史上最详细的使用canvas绘制五角星的方法 昨天我们在课堂上讲到了HTML5中的canvas标签,canvas标签用于绘制图像(通过脚本,通常是 JavaScript).当天布置的作业就是利用can ...

  2. 史上最简单的开发ESP8266物联网小项目的方法

    自己学习ESP8266好久了,从AT指令集到SDK到lua开发也都学习了很多方法.想要切实的完成一个物联网作品大致需要几部分:MCU控制程序+ESP8266开发+服务器选择搭建+app程序设计     ...

  3. 史上最全 | 单目相机测距测速方法大盘点!

    点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心技术交流群 后台回复[ECCV2022]获取ECCV2022所有自动驾驶方向论文! 论文 ...

  4. 史上最全(全平台)docker安装方法!

    2017年2月8日,docker更新到1.13.1(更新日志),此后又分为了docker CE(社区版)和docker EE(商业版). 此处只分享docker CE安装方法,商业版多了容器资源监控和 ...

  5. 史上最简单的rar压缩包文档解密方法,rar压缩包权限密码如何解开?

    wps解密rar压缩包文件,忘记rar压缩包密码怎么找回?rar压缩包解密密码,还在下载软件解密?过时了!!!用「密码帝」 可以轻松在线解密,百度搜索密码帝就可以了,手机电脑都可以用!不用下载安装任何 ...

  6. Unity史上最全旋转详解(Rotate,rotation,localEulerAngles,localRotation,万向节锁)

    Unity史上最全旋转详解 前言 旋转的方法Rotate以及五种重载参数的超级详细理解 Rotate(float xAngle, float yAngle, float zAngle); Unity绕 ...

  7. PHP身份证有效期校验(通用)

    说明:最近项目需求要对用户身份证的有效期验证,但向公安系统或者银联付费请求查询对应信息, 金额成本比较高,每次查询3-5元人民币成本较高,于是需要自行来处理有效期规则和防止有效期. 身份证号码等规则被 ...

  8. 【整理】史上最强的娱乐大餐———九奔、汉澳、器普。。。。。。

    按: 本文内容来源于:http://shouji88.com/msg_list.cgi?bbs_id=000001                               http://shouj ...

  9. 日期,手机号码正则表达式校验,身份证校验等常用工具

    日期类工具 DataUtil public class DateUtils {/*** 北京时区*/public static final ZoneOffset BJ_ZONE = ZoneOffse ...

最新文章

  1. 国际顶级学界业界大咖云集,9 场技术论坛布道,2019 嵌入式智能国际大会强势来袭!...
  2. 分享mac磁盘清理的方法
  3. 第一次使用HP-UX时用到的命令
  4. 配电房来了个傻员工,改变了所有聪明的员工!
  5. 一次前后端分离的实践
  6. php百度搜索框代码,基于jquery的仿百度搜索框效果代码_jquery
  7. mysql mariadb的VC客户端遇到的问题
  8. 你没有变强,是因为你一直很舒服
  9. 5、使用Libgdx设计一个简单的游戏------雨滴
  10. 人脸表情识别从0到部署,猜猜『轮到你了』的微笑狼人到底是谁!
  11. WebLogic如何设置session超时时间
  12. 学习c语言的编程游戏,扫雷游戏-C语言编程学习
  13. html重置默认字体,html网页默认字体
  14. navicat的注册码
  15. JIRA统计工时,我们用Tempo
  16. LeetCode——1931. 用三种不同颜色为网格涂色(Painting a Grid With Three Different Colors)困难]——分析及代码(Java)
  17. Windows 10怎样安装.msi文件?三分钟解决问题
  18. 使用搜狐Sendcloud的Webapi发送邮件:Jodd和Apache Httpclient
  19. 更换SSD系统盘-PE重装系统
  20. Swin-Unet跑自己的数据集(Transformer用于语义分割)

热门文章

  1. 使用UUID作为数据库主键产生的问题及解决方案
  2. 【必看】示波器的前世今生
  3. X210之uboot源码分析
  4. Ruoyi框架学习--服务监控
  5. 北京好,还是深圳好?
  6. 通信行业常用电器术语缩略语(abbr/acro) -----全面,接近专业词典了
  7. idea项目打包为war包
  8. android微信下拉出现小程序,Android 仿新版微信的小程序下拉栏
  9. 图形学基础 | 详解3D中的obj文件格式
  10. 菲律宾外汇储备降至两年来的最低水平