我有一个文本字段,用于YYYY-MM-DD格式的日期。我想要做的是检查日期的正确性。 我的概念是:
deadline = document.getElementById("Deadline").value;
if (deadline[0] == "0" ||
deadline[0] == "1" ||
deadline[0] == "2" ||
deadline[0] == "3" ||
deadline[0] == "4" ||
deadline[0] == "5" ||
deadline[0] == "6" ||
deadline[0] == "7" ||
deadline[0] == "8" ||
deadline[0] == "9" ){
if(deadline[1] == "0" || ...){
if(deadline[2] == "0" || ...){
...
}else{alert("Wrong Format!")}
}
}
}
有更有效的方法吗?
答案 0 :(得分:2)
使用正则表达式:
// yyyy-mm-dd
var re = /^\d{4}-\d{1,2}-\d{1,2}$/;
alert(re.test("2001-11-02"));

答案 1 :(得分:1)
您应该使用正则表达式。检查https://regex101.com/r/iO0pY2/1处的代码。在这里你可以如何使用它:
var str = '2015-02-05'
var re = /^(\d{4})\-(\d{1,2})\-(\d{1,2})$/
var valid = re.test(str);
答案 2 :(得分:1)
使用RegExp
会让您大致了解格式的正确性,但不会检查值的有效性。更好的方法可能是这样的。
function inRange (val, min, max) {
return val >= min && val <= max;
}
var deadLine = document.getElementById('deadline'),
out = document.getElementById('out');
deadLine.addEventListener('change', function (e) {
var text = e.target.value,
valid,
parts,
year,
month,
day,
result;
if ((/^\d{1,4}-\d{2}-\d{2}$/).test(text)) {
parts = text.split('-');
year = parts[0];
month = parts[1];
day = parts[2],
valid = inRange (year, 0, 9999) &&
inRange (month, 1, 12) &&
inRange (day, 0, 31) &&
day == new Date(year, month - 1, day).getDate();
}
if (valid) {
result = 'Correct Format and date!';
} else {
result = 'Wrong Format or date!';
}
out.appendChild(document.createTextNode(result + '\n'));
}, false);
&#13;
<input id="deadline" type="text"></input>
<pre id="out"></pre>
&#13;