4

mm/dd/yyyy の形式である必要がある日付を foll JS 関数がどのように検証するのか、誰でも説明できますか。

<script type="text/javascript">

function checkdate(input){
    var validformat=/^\d{2}\/\d{2}\/\d{4}$/ //Basic check for format validity
    var returnval=false
    if (!validformat.test(input.value))
        alert("Invalid Date Format. Please correct and submit again.")
    else{ //Detailed check for valid date ranges
        var monthfield=input.value.split("/")[0]
        var dayfield=input.value.split("/")[1]
        var yearfield=input.value.split("/")[2]
        var dayobj = new Date(yearfield, monthfield-1, dayfield)
        if ((dayobj.getMonth()+1!=monthfield)||(dayobj.getDate()!=dayfield)||(dayobj.getFullYear()!=yearfield))
            alert("Invalid Day, Month, or Year range detected. Please correct and submit again.")
        else
            returnval=true
    }
    if (returnval==false) input.select()
        return returnval
}
</script>
4

1 に答える 1

5

最初の部分では、正規表現を使用して、値が必要な形式であるかどうかを確認しますmm/dd/yyyy/これにより、それぞれ 2 つ、2 つ、および 4 つの数字で区切られた文字列でない場合、検証が失敗することが保証されます。

2 番目の部分では、個々の を使用して日付オブジェクトを作成しdd、作成されたオブジェクトのプロパティを入力の元の値mmyyyy値およびチェックします。これは、次のような値に対して検証が失敗することを保証するためです。02/31/2015

if ((dayobj.getMonth()+1!=monthfield)||(dayobj.getDate()!=dayfield)||(dayobj.getFullYear()!=yearfield))

上記のステートメントは、作成されたオブジェクトが、作成に使用されたのと同じ値を反映していることを確認するためのものです。また、月のインデックスが から始まることに注意してください。0したがって、-1作成+1中およびチェック中です。

于 2012-11-29T11:05:02.547 に答える