如何检查文本字段值是否具有正确的格式?

时间:2015-02-05 09:28:13

标签: javascript forms

我有一个文本字段,用于YYYY-MM-DD格式的日期。我想要做的是检查日期的正确性。 我的概念是:

deadline = document.getElementById("Deadline").value;
if (deadline[0] == "0" || 
    deadline[0] == "1" ||
    deadline[0] == "2" || 
    deadline[0] == "3" || 
    deadline[0] == "4" || 
    deadline[0] == "5" ||
    deadline[0] == "6" ||
    deadline[0] == "7" ||
    deadline[0] == "8" ||
    deadline[0] == "9" ){
    if(deadline[1] == "0" || ...){
        if(deadline[2] == "0" || ...){
            ...

            }else{alert("Wrong Format!")}
        }
    }
}

有更有效的方法吗?

3 个答案:

答案 0 :(得分:2)

使用正则表达式:



// yyyy-mm-dd
var re = /^\d{4}-\d{1,2}-\d{1,2}$/;

alert(re.test("2001-11-02"));




答案 1 :(得分:1)

您应该使用正则表达式。检查https://regex101.com/r/iO0pY2/1处的代码。在这里你可以如何使用它:

var str = '2015-02-05'
var re = /^(\d{4})\-(\d{1,2})\-(\d{1,2})$/
var valid = re.test(str);

答案 2 :(得分:1)

使用RegExp会让您大致了解格式的正确性,但不会检查值的有效性。更好的方法可能是这样的。



function inRange (val, min, max) {
    return val >= min && val <= max;
}

var deadLine = document.getElementById('deadline'),
    out = document.getElementById('out');

deadLine.addEventListener('change', function (e) {
    var text = e.target.value,
        valid,
        parts,
        year,
        month,
        day,
        result;

    if ((/^\d{1,4}-\d{2}-\d{2}$/).test(text)) {
        parts = text.split('-');
        year = parts[0];
        month = parts[1];
        day = parts[2],
        valid = inRange (year, 0, 9999) &&
                inRange (month, 1, 12) &&
                inRange (day, 0, 31) &&
                day == new Date(year, month - 1, day).getDate();
    }

    if (valid) {
        result = 'Correct Format and date!';
    } else {
        result = 'Wrong Format or date!';
    }
    
    out.appendChild(document.createTextNode(result + '\n'));
}, false);
&#13;
<input id="deadline" type="text"></input>
<pre id="out"></pre>
&#13;
&#13;
&#13;