乐闻世界logo
搜索文章和话题

How to validate email in mongoose

7 个月前提问
3 个月前修改
浏览次数56

6个答案

1
2
3
4
5
6

在Mongoose中,验证电子邮件格式通常是通过在Schema定义中使用正则表达式来完成的。Mongoose提供了一个名为validate的功能,它可以接受一个验证函数或者正则表达式以及一个错误消息。

以下是一个如何在Mongoose中定义一个简单的用户模型,并对电子邮件字段进行格式验证的例子:

js
const mongoose = require('mongoose'); const Schema = mongoose.Schema; // 定义正则表达式来验证电子邮件格式 const emailRegex = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; // 创建一个新的用户模式 const userSchema = new Schema({ email: { type: String, required: true, unique: true, // 使用正则表达式进行验证 validate: { validator: function(email) { return emailRegex.test(email); }, // 如果验证失败,Mongoose将使用此消息 message: props => `${props.value} is not a valid email address!` } }, // 其他字段定义... }); // 创建模型 const User = mongoose.model('User', userSchema); // 使用模型创建一个新用户实例 const user = new User({ email: 'example@domain.com', // 其他字段值... }); // 保存用户并处理可能出现的验证错误 user.save(function(err) { if (err) { // 如果电子邮件格式不正确,将会有一个验证错误 console.error('Error occurred:', err.message); } else { console.log('User saved successfully!'); } });

在这个例子中,emailRegex 定义了电子邮件的验证规则,通过 userSchema 中的 validate 选项应用。如果提供的电子邮件不符合正则表达式的规则,Mongoose 会在尝试保存用户时抛出一个错误,并附带我们定义的错误消息。

需要注意的是,这个正则表达式只是一个基本的电子邮件验证规则,电子邮件地址的实际规则更为复杂,这个正则表达式不能覆盖所有有效的电子邮件地址格式。在实际应用中,可能需要使用更复杂的正则表达式或第三方库来更准确地验证电子邮件地址。

2024年6月29日 12:07 回复

您还可以使用matchvalidate属性在模式中进行验证

例子

shell
var validateEmail = function(email) { var re = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/; return re.test(email) }; var EmailSchema = new Schema({ email: { type: String, trim: true, lowercase: true, unique: true, required: 'Email address is required', validate: [validateEmail, 'Please fill a valid email address'], match: [/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/, 'Please fill a valid email address'] } });
2024年6月29日 12:07 回复

我使用验证器来进行输入清理,它的使用方式非常酷。

安装它,然后像这样使用它:

shell
import { isEmail } from 'validator'; // ... const EmailSchema = new Schema({ email: { //... other setup validate: [ isEmail, 'invalid email' ] } });

工作起来很享受,而且读起来也很好。

2024年6月29日 12:07 回复

您可以使用正则表达式。看看这个问题:Validate email address in JavaScript?

我过去用过这个。

shell
UserSchema.path('email').validate(function (email) { var emailRegex = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/; return emailRegex.test(email.text); // Assuming email has a text attribute }, 'The e-mail field cannot be empty.')
2024年6月29日 12:07 回复

验证 不能很好地与猫鼬一起摆脱警告设置 isAsync 为 false

shell
const validator = require('validator'); email:{ type:String, validate:{ validator: validator.isEmail, message: '{VALUE} is not a valid email', isAsync: false } }
2024年6月29日 12:07 回复

我知道这已经很旧了,但我没有看到这个解决方案,所以我想分享一下:

shell
const schema = new mongoose.Schema({ email: { type: String, trim: true, lowercase: true, unique: true, validate: { validator: function(v) { return /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(v); }, message: "Please enter a valid email" }, required: [true, "Email required"] } });

您可以对要验证的任何类型执行此操作,只需传递适当的正则表达式即可。如果您搜索要验证的类型及其相关的正则表达式,则很容易找到解决方案。这将使您的验证保持一致,并将所有代码放入架构中,而不是挂起函数。

2024年6月29日 12:07 回复

你的答案