我有一个输入字段,允许用户输入日期。
我需要此日期采用以下格式:10Jan13(大小写并不重要)
有一个弹出日历,如果使用它将为用户正确设置日期格式。
我想使用 Javascript 检查输入 onblur
的值,以确保用户没有错误地粘贴或输入日期。
我目前正在检查纯数字字段,如下所示:
var numbers = /^[0-9]+$/;
if (!BIDInput.value.match(numbers))
{
checkedInput.value = "";
alert('Not a number');
}
我正在检查仅包含字母的字段,如下所示:
var letters = /^[a-z]+$/
if (!nameInput.value.match(letters))
{
nameInput.value = "";
alert('Not a letter');
}
如果可能的话,我想以类似的方式检查日期格式。但任何能完成任务的事情都可以。谁能指出我如何完成这项工作的正确方向?
我知道客户端验证不会取代服务器端验证。这仅用于用户体验目的。
最佳答案
你已经拥有你所拥有的一切了。基本上,您的格式是一位或两位数字,然后是 12 个可能的字符串之一,最后是两位数字。例如:
var shortDateRex = /^\d{1,2}(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\d{2}$/;
分割:
^
字符串开头。\d{1,2}
一位或两位数字。(:?...)
非捕获组。或者,如果您愿意,您可以使用捕获组。Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec
交替,允许其中任何一个十二个选择。当然,如果您愿意,您可以添加更多。如果您有两个以相同方式开始的选择(例如Jan
和January
),请将较长的选项放在较早的位置。\d{2}
两位数字。
旁注:原则上我不得不建议不要使用两位数的日期,特别是考虑到我们目前所处的世纪!
<小时/>回应 Amberlamps 的评论,即这不会验证日期:一旦您验证了格式,如果您愿意的话,检查日期本身就很简单了(以排除 例如,2013 年 2 月 30 日
):
var validateDateString = (function() {
var monthNames = "Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec".toLowerCase().split("|");
var dateValidateRex = /^(\d{1,2})(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)(\d{2})$/i;
var arbitraryCenturyCutoff = 30;
function validateDateString(str) {
var match;
var day, month, year;
var dt;
match = dateValidateRex.exec(str);
if (!match) {
return false;
}
day = parseInt(match[1]);
month = monthNames.indexOf(match[2].toLowerCase()); // You may need a shim on very old browsers for Array#indexOf
year = parseInt(match[3], 10);
year += year > arbitraryCenturyCutoff ? 1900 : 2000;
dt = new Date(year, month, day);
if (dt.getDate() !== day ||
dt.getMonth() !== month ||
dt.getFullYear() !== year) {
// The input was invalid; we know because the date object
// had to adjust something
return false;
}
return true;
}
return validateDateString;
})();
...或者类似的东西。
或者,如果(像我一样)您讨厌看到重复的月份名称列表之类的列表,您可以使用带有字符串的 RegExp
构造函数,但您必须记住重复反斜杠:
var monthNamesString = "Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec";
var monthNames = monthNamesString.toLowerCase().split("|");
var dateValidateRex = new RegExp("^(\\d{1,2})(" + monthNamesString + ")(\\d{2})$", "i");
关于javascript - 使用 Javascript 检查输入值的特定格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14937044/