如何在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>
发布于 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>
发布于 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>
我想你是在找这个。如果这解决了你的问题,请告诉我。
更新:我有更新日期验证,但到目前为止还没有。
https://stackoverflow.com/questions/55851164
复制相似问题