【发布时间】:2014-02-01 15:20:23
【问题描述】:
我正在尝试验证一个日期输入框,以便它只接受当前或未来的日期。到目前为止,我一直在努力寻找最终能做到这一点的答案。
这是输入框的 HTML,不包括 <form> 标签:
<p>
<label>Date:</label>
<br>
<input type="number" name="date" placeholder="DD/MM/YYYY" onchange="checkDate()">
</p>
<div id="datewarn"></div>
这是我正在使用的 JavaScript 代码,它验证输入是否为 DD/MM/YYYY 格式,并且输入的数字是有效的日历数字,但这仍然接受过去的日期。
function checkDate() {
var valid = true;
var redate = /(0[1-9]|[12][0-9]|3[01])[\/](0[1-9]|1[012])[\/](19|20)\d\d/;
if (!redate.test(document.bookingsform.date.value)) {
document.bookingsform.date.style.border = "1px solid red";
document.getElementById("datewarn").innerHTML = "Enter a date in the format DD/MM/YYYY.";
document.bookingsform.date.title = "Please enter a date in the format DD/MM/YYYY.";
document.getElementById("datewarn").style.display = "block";
valid = false;
} else {
document.bookingsform.date.style.border = "1px inset #EBE9ED";
document.bookingsform.date.style.borderRadius = "2px";
document.getElementById("datewarn").style.display = "none";
}
}
我所做的研究建议使用 date.js 库?这是一个内置库还是我必须得到的东西?
这只能是 JavaScript,不能是 jQuery。
编辑:抱歉,忘记添加 RegEx 变量。
【问题讨论】:
-
改用输入类型日期。
-
这在 Firefox 上不起作用,Chrome 只能在 YYYY-MM-DD 上运行。 W3C Validator 表示此输入类型不适用于所有浏览器。我宁愿远离它。
-
是的,输入类型编号并非在所有浏览器中都有效,但总有一天会。如果您担心浏览器不兼容,请改用输入类型
text。 -
是的,但验证器不会对数字发出警告,而日期会发出警告。
-
如果您不想要警告并使用当前(或改进的)正则表达式验证所有内容,可以使用
novalidate属性。
标签: javascript validation date