[英]How can I check VB, console application, user input to make sure they entered a valid number?
[英]How can I check if user passes a valid date in javascript?
我有一個javascript函數,檢查日期范圍。 有沒有辦法檢查用戶是否在文本框中輸入了有效日期,無論格式如何?
function checkEnteredDate() {
var inputDate = document.getElementById('txtDate');
//if statement to check for valid date
var formatDate = new Date(inputDate.value);
if (formatDate > TodayDate) {
alert("You cannot select a date later than today.");
inputDate.value = TodayDate.format("MM/dd/yyyy");
}
}
看看這個庫date.js http://code.google.com/p/jqueryjs/source/browse/trunk/plugins/methods/date.js
它有一個名為fromString的有用函數,它將嘗試將字符串(基於Date.format)轉換為有效的日期對象。
如果函數沒有創建有效的日期對象,則返回false - 如果全部返回false,則可以在放棄之前嘗試不同的格式。
以下是您可以測試的一些示例格式:
Date.format = 'dd mmm yyyy';
alert(Date.fromString("26 Jun 2009"));
Date.format = 'mmm dd yyyy';
alert(Date.fromString("Jun 26 2009"));
Date.format = 'dd/mm/yy';
alert(Date.fromString("26/06/09"));
Date.format = 'mm/dd/yy';
alert(Date.fromString("06/26/09"));
Date.format = 'yyyy-mm-dd';
alert(Date.fromString("2009-06-26"));
玩笑
以任意格式解析日期是一個非常棘手的問題(如@Natrium指出的那樣)。 當你考慮到歐洲的日期寫為dd / mm / yyyy時,你會更加困惑,所以你不知道2/7/09是2月7日還是7月2日。
大多數人通過使用javascript庫中的datepicker類型控件或使用月,日和年的設置值的下拉框來解決此問題。
<select name="month">
<option value="1">January</option>
<option value="2">February</option>
...
<option value="12">December</option>
</select>
<select name="day">
<option value="1">1</option>
<option value="2">2</option>
...
<option value="31">31</option>
</select>
<select name="year">
<option value="2000">2000</option>
<option value="2001">2001</option>
...
<option value="2009">2009</option>
</select>
不管格式如何?
這將是棘手的......
全部有效,但都有不同的格式。 所以,無論格式如何......我都很懷疑......
您可以使用正則表達式或自定義代碼。 示例如下:
function isValidDate(dateStr, format) {
if (format == null) { format = "MDY"; }
format = format.toUpperCase();
if (format.length != 3) { format = "MDY"; }
if ( (format.indexOf("M") == -1) || (format.indexOf("D") == -1) || _
(format.indexOf("Y") == -1) ) { format = "MDY"; }
if (format.substring(0, 1) == "Y") { // If the year is first
var reg1 = /^\d{2}(\-|\/|\.)\d{1,2}\1\d{1,2}$/
var reg2 = /^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/
} else if (format.substring(1, 2) == "Y") { // If the year is second
var reg1 = /^\d{1,2}(\-|\/|\.)\d{2}\1\d{1,2}$/
var reg2 = /^\d{1,2}(\-|\/|\.)\d{4}\1\d{1,2}$/
} else { // The year must be third
var reg1 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{2}$/
var reg2 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/
}
// If it doesn't conform to the right format (with either a 2 digit year or 4 digit year), fail
if ( (reg1.test(dateStr) == false) && (reg2.test(dateStr) == false) ) { return false; }
var parts = dateStr.split(RegExp.$1); // Split into 3 parts based on what the divider was
// Check to see if the 3 parts end up making a valid date
if (format.substring(0, 1) == "M") { var mm = parts[0]; } else _
if (format.substring(1, 2) == "M") { var mm = parts[1]; } else { var mm = parts[2]; }
if (format.substring(0, 1) == "D") { var dd = parts[0]; } else _
if (format.substring(1, 2) == "D") { var dd = parts[1]; } else { var dd = parts[2]; }
if (format.substring(0, 1) == "Y") { var yy = parts[0]; } else _
if (format.substring(1, 2) == "Y") { var yy = parts[1]; } else { var yy = parts[2]; }
if (parseFloat(yy) <= 50) { yy = (parseFloat(yy) + 2000).toString(); }
if (parseFloat(yy) <= 99) { yy = (parseFloat(yy) + 1900).toString(); }
var dt = new Date(parseFloat(yy), parseFloat(mm)-1, parseFloat(dd), 0, 0, 0, 0);
if (parseFloat(dd) != dt.getDate()) { return false; }
if (parseFloat(mm)-1 != dt.getMonth()) { return false; }
return true;
}
我意識到我必須對后面的代碼進行驗證。 這些都是很好的答案,但開始變得復雜。 我不想在角落里支持自己,所以我選擇了替代路線。 謝謝
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.