首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用正则表达式在JavaScript中验证用户的出生日期?

如何使用正则表达式在JavaScript中验证用户的出生日期?
EN

Stack Overflow用户
提问于 2019-04-25 22:02:33
回答 2查看 3.1K关注 0票数 1

如何在JavaScript中使用正则表达式验证用户的生日?test是用正则表达式验证用户输入的首选方法吗?

function myValidator() {
  result = true;
  
  var today = new Date();
  var todayYear = today.getFullYear();

  var userBirthDate = new Date(document.getElementById("dob").value);

  var regexVar = new RegExp("([0-9]{2})\/([0-9]{2})\/([0-9]{4})");
  var regexVarTest = regexVar.test(userBirthDate);

  var cutOff19 = todayYear - 19;
  var cutOff95 = todayYear - 95;

  if (isNaN(userBirthDate)) {
    dobErrMsg.innerHTML = "date of birth must be a number";
  } else if (regexVarTest == false) {
    dobErrMsg.innerHTML = "enter date of birth as dd/mm/yyyy";
  } else if (userBirthDate >= cutOff19) {
    dobErrMsg.innerHTML = "you have to be older than 19";
  } else if (userBirthDate <= cutOff95) {
    dobErrMsg.innerHTML = "you have to be younger than 95";
  }

  return result;

}
<p>
  <label for="dob">Date of Birth</label>
  <input type="text" name="dob" id="dob" maxlength="10" placeholder="dd/mm/yyyy" pattern="([0-9]{2})\/([0-9]{2})\/([0-9]{4})" required="required" />
  <span id="dobErrMsg"></span>
</p>
<button onclick="myValidator()">Run validation</button>

EN

回答 2

Stack Overflow用户

发布于 2019-04-25 22:21:53

你的代码中有一些问题,在注释中解释了一些变量缺少初始化的问题。

然而,正则表达式的问题是,当您这样做时

new Date("07/03/2010");

其结果是

Sat Jul 03 2010 00:00:00 GMT+0530 

这就是为什么你的正则表达式应该传递一个值,比如07/03/2010,而不是传递变更值。的直接值上运行正则表达式

document.getElementById("dob").value

所以它应该是这样的

var userBirthDate = document.getElementById("dob").value;
var regexVar = new RegExp("([0-9]{2})\/([0-9]{2})\/([0-9]{4})");
var regexVarTest = regexVar.test(userBirthDate);

function myValidator() {
  var userBirthDate = document.getElementById("dob").value;
  var regexVar = new RegExp("([0-9]{2})\/([0-9]{2})\/([0-9]{4})");
  var regexVarTest = regexVar.test(userBirthDate);
  
  alert(regexVarTest);
}
<p>
  <label for="dob">Date of Birth</label>
  <input type="text" name="dob" id="dob" maxlength="10" required 
         placeholder="dd/mm/yyyy" 
         pattern="([0-9]{2})\/([0-9]{2})\/([0-9]{4})"/>
  <span id="dobErrMsg"></span>
</p>
<button onclick="myValidator()">Run validation</button>

票数 1
EN

Stack Overflow用户

发布于 2019-04-25 22:27:37

function myValidator() {
      var result = true;
      var birthday = document.getElementById("dob").value
      var regexVar = new RegExp("(([012]{1})?[0-9]{1}|[3]?[01]{1})\/(([0]{1})?[0-9]{1}|[1]{1}?[012]{1})\/([12]{1}[09]{1}[0-9]{2})");
      var regexVarTest = regexVar.test(birthday);
      //if format is valid
      if (regexVarTest){
        var date_array = birthday.split('/')
        var userBirthDate = new Date(date_array[2], parseInt(date_array[1])-1, date_array[0]);
        var userage = userBirthDate.getFullYear();
        var todayYear = new Date().getFullYear()
        var cutOff19 = todayYear - 19;
        var cutOff95 = todayYear - 95;
      }
      
      dobErrMsg.innerHTML = "";
      
      if (regexVarTest == false) {
        dobErrMsg.innerHTML = "enter date of birth as dd/mm/yyyy";
        result = false;
      } else if (isNaN(Date.parse(date_array[2]+'-'+date_array[1]+'-'+date_array[0])) || new Date(date_array[2]+'-'+date_array[1]+'-'+date_array[0]).getDate() != parseInt(date_array[0])){
        dobErrMsg.innerHTML = "enter valid date";
        result = false;
      } else if (userage >= cutOff19) {
        dobErrMsg.innerHTML = "you have to be older than 19";
        result = false;
      } else if (userage <= cutOff95) {
        dobErrMsg.innerHTML = "you have to be younger than 95";
        result = false;
      }
    
      return result;
    
    }
<p>
  <label for="dob">Date of Birth</label>
  <input type="text" name="dob" id="dob" maxlength="10" placeholder="dd/mm/yyyy" pattern="([0-9]{2})\/([0-9]{2})\/([0-9]{4})" required="required" />
  <span id="dobErrMsg"></span>
</p>
<button onclick="myValidator()">Run validation</button>

我想你是在找这个。如果这解决了你的问题,请告诉我。

更新:我有更新日期验证,但到目前为止还没有。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55851164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档