Jquery/JS 使用Input 输入生日并限制年龄

客户需求如下

  1. 不要用datepicker点,说是手机太小不好点+老人不会点
  2. 资料库格式为西元年,但一堆人填民国年

CodePen程序码:https://codepen.io/shih-min-chou/pen/RwZEjGg

HTML Input

<input type="text" class="form-control" id="inputDate" placeholder="西元年月日 如:19901201"
                  onkeyup = "value=value.replace(/[^0-9\-]/g,'')" inputmode="numeric" minlength="8" maxlength="8"
                  onchange="checkDate(this)" pattern="(?:19|20)(?:(?:[13579][26]|[02468][048])-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-9])|(?:(?!02)(?:0[1-9]|1[0-2])-(?:30))|(?:(?:0[13578]|1[02])-31))|(?:[0-9]{2}-(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:(?!02)(?:0[1-9]|1[0-2])-(?:29|30))|(?:(?:0[13578]|1[02])-31)))"
                  title="西元年月日 如:19901201" required>

中间pattern部分参考https://www.html5pattern.com/Dates
value.replace 让Input仅能输入数字及'-'符号
inputmode 让手机用户的键盘仅能输入数字
让送出时仅能输入19xx年或20xx年

<script>
      function checkDate(o){
        var dateVal = o.value
        var dateYear = dateVal.substr(0, 4);
        var dateMonth = dateVal.substr(4, 2);
        var dateDay = dateVal.substr(6, 2);
        
        function clearInput(){
          o.focus();
          o.value = '';
        }
        
        if (dateVal !== '' && dateVal.length == 8){
          dateVal = dateYear + "-" + dateMonth + "-" + dateDay;
          o.value = dateVal;
          var age = getAge(dateVal);
          if ( age < 20 ){
            alert('年龄需满20岁以上');
            clearInput();
          }else if ( age > 75 ){
            alert('年龄需75岁以下');
            clearInput();
          }
        }else {
          alert("请输入正确格式 西元年月日 如:19901201");
          clearInput();
        }
      }
      
      //抓取年龄
      function getAge(dateString) {
        var today = new Date();
        var birthDate = new Date(dateString);
        var age = today.getFullYear() - birthDate.getFullYear();
        var m = today.getMonth() - birthDate.getMonth();
        if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {
            age--;
        }
        return age;
      }
    </script>

大概纪录一下,因为网路上几乎都只找的到使用Datepicker的方式


<<:  Windows Server 如何安装 SQL Server 2019 免费开发版

>>:  Python & SQLALchemy 学习笔记_资料表的建立

Day-20 面试考古题破解区(2)

令我意外的是…昨天的面试考古题破解区(1)人气满高的也,哈哈哈! 事不疑迟,我们今天马上来看看面试...

Vue 如何在 LocalHost 开发环境时使用 HTTPS

如果你有 Localhost 开发环境需要以 HTTPS 浏览时,可以参考以下方法: 方法一:vue...

Day 10 [Python ML、特徵工程] 特徵生成

汇入基线模型(Baseline model) %matplotlib inline import m...

Day 11 - Spring Boot & JdbcTemplate

在实际开发中,一定会需要将资料持久化,常见的持久化技术有Spring 自带的JdbcTemplate...

[Day 50] 留言板後台及前台(六) - 前端显示资料

昨天我们已经把资料写进去了, 今天要开始显示留言板了, 但是首先我们需要抓使用者的图片, 所以要先在...