要驗證使用者自行輸入的日期時間,使用 Regular Expression 來驗證是最方便的方法。 ### 什麼是 Regular Expression Regular Expression 能夠描述出字串的出現模式,其中一個用途是可以用來驗證字串是否符合某個特定的 Pattern。例如 : ```js // define a string var str1= 'Hello World'; var str2= 'World Hello'; // define regex pattern var regex = /^Hello World$/; console.log(regex.test(str1)); // true console.log(regex.test(str2)); // false ``` ### 驗證日期字串 例如我們要限制使用者輸入的日期格式為 `YYYY-MM-DD` 的話,那麼以下的日期格式是能通過的。 ```js // valid dates var validDates = [ '2020-01-02', '2020-02-29', '2020-12-31' ]; // invalid dates var invalidDates = [ '02-02-2020, '31-01-2020', '04-30-2020' ]; ``` 要使用 Regular Expression 來表達這個格式的話,可以使用以下語法 : ```js // regex for checking date string var regex = /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/; ``` ### 解說 下面會為上面的 Regular Expression 進行解說。 |符號|解釋| |---| |`^`|字串的開始| |`[0-9]`|字符為 0 到 9 之間的數字| |`{4}`|上一個字符重覆 4 次| |-|出現 "-" 字符 1 次| |`[0-9]`|字符為 0 到 9 之間的數字| |`{2}`|上一個字符重覆 2 次| |-|出現 "-" 字符 1 次| |`[0-9]`|字符為 0 到 9 之間的數字| |`{2}`|上一個字符重覆 2 次| |`$`|字串的結尾| 用這樣的 Regular Expression 便能測試出字串是否符合特定的日期格式。 ```js // regex for checking date string var regex = /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/; console.log(regex.test('2020-01-02')); // true console.log(regex.test('2020-11-22')); // true console.log(regex.test('2020-33-99')); // true ``` 從上面的結果可以看到,雖然可以正常檢查到日期格式,但是會連 `2020-33-99` 這種不合法的日期都會能通過。如果要加強度合法日期的檢查,則需要再修改一下 Regular Expression 內容。 ### 驗查日期字串加強版 我們使用上面的 Regular Expression 再加以修改一下。 ```js // regex for checking date string var regex = /^[0-9]{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$/; ``` 經過修改後的 Regular Expression 就可以檢查出月份在 1 到 12 之間及日期在 1 到 31 之間,但是如果要能驗證出 31 日及 30 日的月份甚至是潤年的話,就需要更多的邏輯檢查了。