要驗證使用者自行輸入的日期時間,使用 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 日的月份甚至是潤年的話,就需要更多的邏輯檢查了。