在Javascript中逐步验证日期

时间:2013-12-06 14:13:22

标签: javascript regex validation

我对日期有这种模式:

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;
}

2 个答案:

答案 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()....

        }
    });