Javascript 中使用Validator.js在Node.js中验证表单数据

Posted by cl9000 on November 12, 2020

创造性就是发明、实验、成长、冒险、犯规、犯错和享受乐趣。 ——<玛丽·卢·库克>

介绍

几乎每个网站都涉及通过 html 表单收集用户输入。每当我们收集用户数据时,我们都必须对其进行验证。在计算机科学中,数据验证是检查输入的数据是否合理和合理的过程。

考虑为电子邮件订阅开发一个表单。在这种情况下,我们要检查提交的电子邮件是否遵循通用电子邮件格式,如u sername@randomMail.com. 如果没有验证,恶意用户可以输入无用的值,甚至执行 SQL 注入。

在本文中,我们将使用 Validator.js 执行表单数据验证- 一个专为此目的构建的轻量级 NPM 包。
https://www.npmjs.com/package/validator

安装 Validator.js

让我们为我们的项目创建一个名为 string-validator 的目录,进入它,创建一个 index.js 入口点并使用 npm 默认设置初始化一个 Node 项目:

1
2
3
4
5
6
$ mkdir string-validator
$ cd string-validator
$ npm init -y
$ touch index.js
// 初始化项目后,我们可以Validator.js使用以下命令安装包:
$ npm install validator

使用 Validator.js 进行表单数据验证

考虑一个销售图书的应用程序,其中首先使用 HTML表单收集用户输入。然后将此数据以 JSON 格式发送到服务器进行进一步处理。让我们看看如何为此完成字符串验证。

假设这是从前端发送的数据。让我们将这个数据保存在 index.js 文件中。同样,让我们在文件中要求 Validator.js:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
const validator = require("validator")

const data = {
"gender": "male",
"name": {
"title": "mr",
"first": "brad",
"last": "gibson"
},
"countryCode": "IE",
"postalCode": "93027",
"email": "brad.gibson@example.com",
"cell": "081-454-0666",
"dob": "1993-07-20T09:44:18.674Z",
"creditCardNumber": "4539415755005206",
"book": {
"title": "Harry Potter and the Deathly Hallows",
"author": "Rowling, J. K.",
"isbn": "9780545010221",
"isbnVersion": "13"
}
}

Validator.js 有很多预先设置的功能来检查不同输入的有效性,例如信用卡、手机、电子邮件、邮政编码等。

1
2
3
4
5
6
7
8
9
10
// 检查一下用户是否向我们提供了有效的信用卡详细信息
console.log(validator.isCreditCard(data.creditCardNumber)); // true
// 为了交付这本书,邮政编码必须是有效的。所以,让我们检查一下:
console.log(validator.isPostalCode(data.postalCode, data.countryCode)) // false
// 电话号码验证可以使用:
console.log(validator.isMobilePhone(data.cell, `en-${data.countryCode}`)); // false
// 电子邮件验证可以使用:
console.log(validator.isEmail(data.email)) // true
// 此外,我们可以使用以下方法进行 ISBN 验证:
console.log(validator.isISBN(data.book.isbn, data.book.isbnVersion)) // true

然后,我们可以提示用户重新输入任何无效信息,以确保我们拥有干净、可用的数据。

总结

在本文中,我们介绍了 Validator.js NPM 包——这是一个用于数据和字符串验证的轻量级包。

参考

关注【公众号】,了解更多。



支付宝打赏 微信打赏

赞赏一下 坚持原创技术分享,您的支持将鼓励我继续创作!