DatePicker验证Jquery如何验证

时间:2014-08-14 14:06:24

标签: javascript jquery asp.net-mvc validation datepicker

我有一个Datepicker,因为用户可能会将无效字符写入文本框,我想要进行日期选择器验证。

这是我的表格:

@using (Html.BeginForm("Action", "Controller", FormMethod.Post))
{

@Html.TextBox("txtDate", txtDate, "{0:dd.MM.yyyy}", new { @class = "date", id = "txtDate" })
<input type="submit" id="btnSubmit" value="Getir" />

} 

第一个问题: 我的日期就像“dd.MM.yyyy”,但在这个脚本代码中,它就像“mm / dd / yyyy”。我如何格式化这个脚本代码,如“dd.MM.yyyy”?

第二个问题: 如果我的日期验证为false,我如何禁用按钮点击提交?

以下是脚本代码和its link.

 $(function() {
    $('#btnSubmit').bind('click', function(){
        var txtVal =  $('#txtDate').val();
        if(isDate(txtVal))
            alert('Valid Date');
        else
            alert('Invalid Date');
    });

function isDate(txtDate)
{
    var currVal = txtDate;
    if(currVal == '')
        return false;

    var rxDatePattern = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/; //Declare Regex
    var dtArray = currVal.match(rxDatePattern); // is format OK?

    if (dtArray == null) 
        return false;

    //Checks for mm/dd/yyyy format.
    dtMonth = dtArray[1];
    dtDay= dtArray[3];
    dtYear = dtArray[5];        

    if (dtMonth < 1 || dtMonth > 12) 
        return false;
    else if (dtDay < 1 || dtDay> 31) 
        return false;
    else if ((dtMonth==4 || dtMonth==6 || dtMonth==9 || dtMonth==11) && dtDay ==31) 
        return false;
    else if (dtMonth == 2) 
    {
        var isleap = (dtYear % 4 == 0 && (dtYear % 100 != 0 || dtYear % 400 == 0));
        if (dtDay> 29 || (dtDay ==29 && !isleap)) 
                return false;
    }
    return true;
}

});

1 个答案:

答案 0 :(得分:1)

第一个问题。将脚本中的rxDatePattern变量更改为:

var rxDatePattern = /^(\d{1,2})(\.|-)(\d{1,2})(\.|-)(\d{4})$/; //Declare Regex

注意我是如何用点代替斜杠的。

然后我建议你默认禁用该按钮,并在日期字段文本框中有效日期时启用它。所以我会将$('#btnSubmit').bind('click')函数更改为:

$('#txtDate').on('keyup', function(){
    var txtVal =  $('#txtDate').val();
    if(isDate(txtVal))
        $('#btnSubmit').prop('disabled', false);
    else
        $('#btnSubmit').prop('disabled', true);
});

See jsFiddle

修改

我的坏,我误解了。不知怎的,你要求mm.dd.yyyy格式。

但是我对原始代码进行了一些更改。使用相同的html我改变了jQuery:

function isDate(txtDate)
{
    //Here comes one ugly, long and working regexp
    var rxDatePattern = /^(((0?[1-9]|[12]\d|3[01])\.(0?[13578]|1[02])\.((19|[2-9]\d)\d{2}))|((0?[1-9]|[12]\d|30)\.(0?[13456789]|1[012])\.((19|[2-9]\d)\d{2}))|((0?[1-9]|1\d|2[0-8])\.0?2\.((19|[2-9]\d)\d{2}))|(29\.0?2\.((1[6-9]|[2-9]\d)(0?[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/g;

    return txtDate.match(rxDatePattern); //Returns true iff. currval is a valid date
};
function validate_datePicker(){
    var txtVal =  $('#txtDate').val();
    if(isDate(txtVal))
        $('#btnSubmit').prop('disabled', false);        
    else
        $('#btnSubmit').prop('disabled', true);
};
$(document).ready(function() {
    $('#txtDate').on('keyup', function(){
        validate_datePicker();
    });
    validate_datePicker();
});

结帐新的jsFiddle

正则表达式评估给定日期字符串是否为日期。请注意,日期为08.08.2014和8.8.2014同时有效。 (即日期和月份前面的零是可选的)