JavaScript 日期格式檢查
判斷使用者輸入日期格式是否為 YYYY/MM/DD
表單在檢查日期格式,最好在客戶端 JavaScript 送出資料時驗證日期值是否正確。
JavaScript
但是這樣只是檢驗其最大限制值,必須再進一步解析大月、小月、閨月的問題,否則會出現不合法的日期。
function dateValidationCheck(str) { let re = new RegExp("^([0-9]{4})[./]{1}([0-9]{1,2})[./]{1}([0-9]{1,2})$"); let strDataValue; let infoValidation = true; if ((strDataValue = re.exec(str)) != null) { let i; i = parseFloat(strDataValue[1]); if (i <= 0 || i > 9999) { infoValidation = false; } i = parseFloat(strDataValue[2]); if (i <= 0 || i > 12) { infoValidation = false; } i = parseFloat(strDataValue[3]); if (i <= 0 || i > 31) { infoValidation = false; } } else { infoValidation = false; } if (!infoValidation) { alert("請檢查輸入 YYYY/MM/DD 日期格式"); } return infoValidation; }
Html
<form method="post" name="dateCheckFrom" onsubmit="return dateValidationCheck(this.date.value);"> 請依格式輸入日期 YYYY/MM/DD: <input type="text" name="date" size="15" /> <input type="submit" value="送出資料" /> </form>
判斷檢驗日期是否正確
使用 Date.parse 但是解讀字串傳回其總毫秒數,使用 Date.parse 由於瀏覽器之間可能的不同與差異問題。
Date.parse("2019-02-29") // Firefox NaN
Date.parse("2019-02-29") // Chrome 1551398400000
Date.parse("2019-02-29") // Edge 1551398400000
Date.parse("2019-02-29") // Opera 1551398400000
嘗試將日期字串使用 new Date() 但需要將結果以 getFullYear(), getMonth() 及 getDate() 提取,再次比照原輸入日期字串,會有些麻煩但是可以得到瀏覽器之間的一致。
new Date("2019/02/29").toLocaleString(); // '2019/3/1 上午12:00:00'
💡 其中 toLocaleString() 回傳依「電腦系統」的地區設定輸出的日期時間字串,只是用中文比較易讀。
let oDate = new Date("2019-02-29") // Date Fri Mar 01 2019 00:00:00 GMT+0800 (台北標準時間)
如此其輸入日期字串的月份及日、就是 false 不一樣、需要依使用者輸入之欄位方式來拆解判斷。
let cYear = oDate.getFullYear(); let cMonth = oDate.getMonth() + 1; let cDate = oDate.getDate();
輸入日期字串 iYear, iMonth, iDate
let result = (iYear == cYear) && (iMonth == cMonth) && (iDate == cDate);
年
月
日
功能 : 判斷 v 是否是整數
如果輸入日期以年、月、日、分別輸入或許會需要判斷是否為數值。
function IsInt(n) { let check = n.match(/^[0-9]+$/); if (check == null) { return false; } else { return true; } }
使用函式 IsNumeric 判斷數值
let IsNumeric = function (input) { return (input - 0) == input && input.length > 0; }
IsNumeric("-1") = true IsNumeric("-1.5") = true IsNumeric("0") = true IsNumeric(".38") = true IsNumeric("1120") = true IsNumeric("1e+3") = true IsNumeric("0x89f") = true IsNumeric("2,600") = false IsNumeric("Numeric") = false IsNumeric("") = false