1月 22, 2020 Javascript
要驗證使用者自行輸入的日期時間,使用 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 日的月份甚至是潤年的話,就需要更多的邏輯檢查了。
過去文章
2025 (9)
4 (5)
3 (1)
2 (3)
2024 (25)
11 (3)
10 (3)
9 (1)
3 (18)
2022 (6)
10 (1)
6 (2)
5 (1)
3 (1)
1 (1)
2021 (21)
11 (7)
7 (1)
6 (2)
5 (2)
4 (6)
3 (2)
2 (1)
2020 (92)
12 (1)
11 (2)
10 (4)
9 (10)
8 (5)
7 (1)
6 (3)
5 (1)
4 (4)
3 (25)
2 (7)
1 (29)
2019 (57)
12 (25)
11 (7)
9 (25)