[英]How can I check if a text field value has the correct format?
我有一個文本字段,用於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!")}
}
}
}
有更有效的方法嗎?
使用正則表達式:
// yyyy-mm-dd var re = /^\\d{4}-\\d{1,2}-\\d{1,2}$/; alert(re.test("2001-11-02"));
您應該使用正則表達式。 在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);
盡管使用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);
<input id="deadline" type="text"></input> <pre id="out"></pre>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.