# 🏅 Day 25 - validator 驗證
可以使用 [validator](https://www.npmjs.com/package/validator) 驗證表單資料
以下介紹幾個方法,詳細可再參考[文件說明](https://www.npmjs.com/package/validator#validators)查看所有可使用的方法
#### 驗證是否為信箱
`validator.isEmail()`
```javascript
console.log(validator.isEmail('ex@mail.com')); // true
console.log(validator.isEmail('123')); // false
```
#### 驗證長度
`validator.isLength()`
```javascript
// 驗證字串長度是否至少有 3 碼以上
console.log(validator.isLength('12345', { min: 3 })); // true
// 驗證字串長度是否最多 6 碼
console.log(validator.isLength('1234567', { max: 6 })); // false
```
### 參考資源
- [validator 方法](https://github.com/validatorjs/validator.js#validators)
題目
---
參考最終作業設計稿「註冊(錯誤訊息)」頁面,使用 validator 加入自訂的驗證,讓使用者註冊帳號時,可以先驗證資料確保符合正確格式
依照註解加入下方驗證資料格式需求,並搭配 `appError()` 自訂錯誤訊息,調整程式碼 `...` 的部分
`routes/users.js`
```javascript=
router.post('/sign_up', handleErrorAsync(async (req, res, next) => {
let { name, email, password } = req.body;
// 加入驗證,確保使用者註冊資料符合格式
// 三個欄位皆必填
if (!name || !email || !password) {
return next(appError(400, '請確保所有欄位皆填寫', next));
}
// 暱稱 name 長度需至少 2 個字元以上
...
// 信箱 email 格式正確
...
// 密碼 password 長度至少 8 碼以上
...
const newUser = await User.create({
email,
password,
name
});
res.status(200).json({
status: 'success',
data: newUser
});
}));
```
## 回報流程
將答案寫在 CodePen 並複製 CodePen 連結貼至底下回報就算完成了喔!
解答位置請參考下圖(需打開程式碼的部分觀看)

<!-- 解答:
```javascript=
router.post('/sign_up', handleErrorAsync(async (req, res, next) => {
let { name, email, password } = req.body;
// 加入驗證,確保使用者註冊資料符合格式
// 三個欄位皆必填
if (!name || !email || !password) {
return next(appError(400, '請確保所有欄位皆填寫', next));
}
// 暱稱 name 長度需至少 2 個字元以上
if (!validator.isLength(name, { min: 2 })) {
return next(appError(400, '暱稱需至少 2 個字元以上', next));
}
// 信箱 email 格式正確
if (!validator.isEmail(email)) {
return next(appError(400, 'Email 格式錯誤', next));
}
// 密碼 password 長度至少 8 碼以上
if (!validator.isLength(password, { min: 8 })) {
return next(appError(400, '密碼需至少 8 碼以上', next));
}
const newUser = await User.create({
email,
password,
name
});
res.status(200).json({
status: 'success',
data: newUser
});
}));
```
-->
回報區
---
<!--
將答案貼至下方表格內,格式:
| Discord 暱稱 | [CodePen](連結) |
-->
| Discord | CodePen / 答案 |
|:-------------:|:-----------------:|
| xxx | [CodePen]() |
| 2魚 | [CodePen](https://codepen.io/ijrekmsn-the-sans/pen/LYvKyQP) |
| jenny7532 | [CodePen](https://codepen.io/wei-chen-wu/pen/ExzYQYv) |
| 苡安 | [hackmd](https://hackmd.io/@L7K9-66lSeagS28AP0_GjQ/Skf91_OM0) |
|Lobinda|[HackMD](https://hackmd.io/@Lobinda/ryTPFFuMR)|
| Chia Pin | [CodePen](https://codepen.io/joker-cat/pen/dyEbeWz) |
| william威良 | [CodePen](https://codepen.io/snowman12320/pen/pomzVrM?editors=1010) |
| wei | [CodePen](https://hackmd.io/@xu7yoa5cSsqaron7h9XhUw/HkqpijOfA)|
| ej_chuang| [CodePen](https://codepen.io/EJChuang/pen/dyEbQbB)|
| william_hsu| [CodePen](https://codepen.io/william8815/pen/BaeBGgY)|
| Hank| [CodePen](https://codepen.io/tw1720/pen/qBGBddp)|
| Aida| [CodePen](https://codepen.io/ada23410/pen/bGyGLNy?editors=0010)|
| runweiting | [CodePen](https://codepen.io/weiting14/pen/ExzaJGj)|
| Tiya | [CodePen](https://codepen.io/Tiya_blank/pen/rNbQPbY)|
|Mei|[CodePen](https://codepen.io/l_umei/pen/abrdjME)|
| fabio20 | [CodePen](https://codepen.io/fabio7621/pen/WNBowbQ) |