我对日期有这种模式:
var regexFormat = "\\d{2}-\\d{2}-\\d{4}"
每当用户按下一个键时,我必须检查插入的值“可能”是否为有效日期。
E.G。如果用户按下0,1, - “实时”验证器必须说“是,它可能是日期”,而如果用户按下“a”,则验证器必须返回false。
所以我的问题最终是:我如何进行“部分”验证?
谢谢!
好的,所以不要被标记为偏离主题,我会用这个丑陋的尝试来“奖励”你解决我的问题:
_getDaysList: function (startingDate ,callback) {
var that = this,
currentDate = new Date(),
partialDate = /^(\d(\d(-(\d(\d(-(\d(\d(\d(\d)?)?)?)?)?)?)?)?)?)?$/,
partialYear = /^(\d(\d(\d(\d)?)?)?)?$/,
partialMonth = /^(\d(\d)?)?$/,
partialDay = /^(\d(\d)?)?$/,
list = [];
if (partialDate.test(startingDate)) {
var counter = 0;
while ( startingDate.length != 10 && counter <=5000) {
counter++;
if (// And matches a specific date
that._startsWith(that._dateToString(currentDate),startingDate)) {
// La data segue il parametro.
list.push(that._dateToString(currentDate));
if (that._isFunction(callback)) {
callback(list);
}
return;
}
currentDate = that._addDays(currentDate, -1);
}
}
if (that._isFunction(callback)) {
callback(list);
}
return list;
}
答案 0 :(得分:4)
这有点难看,但这样的事情可能有用:
var partialDate = /^(\d(\d(-(\d(\d(-(\d(\d(\d(\d)?)?)?)?)?)?)?)?)?)?$/;
partialDate.test(""); //=> true
partialDate.test("a") //=> false
partialDate.test("1"); //=> true
partialDate.test("12"); //=> true
partialDate.test("12-a"); //=> false
partialDate.test("12-2"); //=> true
partialDate.test("12-25"); //=> true
partialDate.test("12-25-2"); //=> true
partialDate.test("12-25-2"); //=> true
partialDate.test("12-25-20"); //=> true
partialDate.test("12-25-201"); //=> true
partialDate.test("12-25-201fooled you"); //=> false
partialDate.test("12-25-2013"); //=> true
partialDate.test("12-25-2013 is a holiday"); //=> false
这只是围绕每个后续角色包装一个可选组。
答案 1 :(得分:2)
您可以使用具有大量分组OR条件的长正则表达式。
我会首先验证按键输入,因为您知道您的输入应该只是\ d或 - ,如果其他任何东西都返回false。
然后,如果它通过第一个输入验证,则将其与存储组合日期字符串的变量组合,并验证模式是否正确。我很懒,我敢肯定我能想出一个可以捕获全部的正则表达式,但它只有10个字符,你可以检查日期字符串长度并根据长度和正确的模式进行验证。它为您提供了一些关于错误通知可能需要的灵活性。我在我的例子中使用jquery。
var date_string = "";
$('input[type="date"]').keyup(function(){
self = $(this).val();
if(self.val().match(/(\\d|-)/){
if(date_string.length() == 2 && date_string.match(regex_for_2_chars)){
date_string += self.val();
}
else if()....
}
});