📅  最后修改于: 2023-12-03 15:40:42.681000             🧑  作者: Mango
在使用 Node.js 编写应用程序时,常常需要对用户输入的数据进行验证。中间件库如 express-validator 可以帮助我们完成这个任务。但是,在某些情况下,我们可能更喜欢没有中间件的纯 Node.js 操作。
在本文中,我们将介绍如何使用 Node.js 编写不需要中间件的验证代码。
首先,我们需要设置一个 Node.js 项目。打开命令行,并执行以下命令:
mkdir node-validation
cd node-validation
npm init -y
这将为我们创建一个名为 node-validation
的文件夹,并在其中创建一个 package.json
文件。
接下来,我们需要安装一些必要的依赖项:
npm install --save chalk
我们选用了 chalk 作为我们的命令行样式库。
第一个例子将是验证中国大陆手机号码。我们将定义一个函数,该函数接收一个字符串参数并返回一个布尔值。在这个例子中,我们将使用正则表达式来验证号码。以下是代码:
const chalk = require('chalk');
// 手机号码验证函数
function validatePhone(phone) {
const reg = /^((\+86)|(86))?1(3|4|5|6|7|8|9)\d{9}$/;
return reg.test(phone);
}
// 测试
const testPhone1 = '+8613512345678';
const testPhone2 = '13512345678';
console.log(chalk.cyan(`验证 ${testPhone1} 结果:${validatePhone(testPhone1)}`));
console.log(chalk.cyan(`验证 ${testPhone2} 结果:${validatePhone(testPhone2)}`));
输出:
验证 +8613512345678 结果:true
验证 13512345678 结果:true
我们使用一个正则表达式来匹配手机号码。这个正则表达式使用 ^
和 $
,让它只在整个字符串中匹配。它还使用 |
,这意味着我们可以接受 +86 和 86 作为前缀。最后,它使用 \d
,这是一个表示数字的元字符。
接下来是验证密码。在这个例子中,我们将确保密码至少有 8 个字符,并且包含字母和数字。以下是代码:
// 密码验证函数
function validatePassword(password) {
const reg = /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$/;
return reg.test(password);
}
// 测试
const testPwd1 = 'password123';
const testPwd2 = 'pass';
console.log(chalk.cyan(`验证 ${testPwd1} 结果:${validatePassword(testPwd1)}`));
console.log(chalk.cyan(`验证 ${testPwd2} 结果:${validatePassword(testPwd2)}`));
输出:
验证 password123 结果:true
验证 pass 结果:false
使用正则表达式,我们将匹配至少包含一个字母和一个数字的 8 个或更多字符的字符串。
最后一个例子将是验证电子邮件地址。以下是代码:
// 电子邮件地址验证函数
function validateEmail(email) {
const reg = /^([a-zA-Z0-9._+-])+@([a-zA-Z0-9-])+\.([a-zA-Z0-9]{2,4})(\.[a-zA-Z0-9]{2,4})?$/;
return reg.test(email);
}
// 测试
const testEmail1 = 'example@example.com';
const testEmail2 = 'example@com';
console.log(chalk.cyan(`验证 ${testEmail1} 结果:${validateEmail(testEmail1)}`));
console.log(chalk.cyan(`验证 ${testEmail2} 结果:${validateEmail(testEmail2)}`));
输出:
验证 example@example.com 结果:true
验证 example@com 结果:false
那么我们的正则表达式是如何工作的呢?它使用 ^
和 $
元字符在字符串的开头和结尾进行匹配。它还使用了一些限定符:+
表示一个或多个字符,?
表示可选字符。最后,它使用了方括号以及 \.
,这是一个转义句点。