Javascript 如何修复此json电子邮件模式

Javascript 如何修复此json电子邮件模式,javascript,json,mongodb,validation,design-patterns,Javascript,Json,Mongodb,Validation,Design Patterns,我正在创建集合用户,要求他在其中添加电子邮件字段 这是我在验证集合中的内容 db.createCollection("user", { validator: { $jsonSchema : { bsonType: "object", required: ["email"], properties: { "email": {type: "string", pattern: "^(\\([a-z] {30}\\))?[a-z]{30}

我正在创建集合用户,要求他在其中添加电子邮件字段

这是我在验证集合中的内容

db.createCollection("user", {
validator: {
    $jsonSchema : {
        bsonType: "object", 
        required: ["email"],
    properties: {
        "email": {type: "string", pattern: "^(\\([a-z] {30}\\))?[a-z]{30}@[.]$"}
}}}})
我希望MongoDB能够接受电子邮件“email@email.com“格式。验证不允许这种模式

WriteResult({
"nInserted" : 0,
"writeError" : {
    "code" : 121,
    "errmsg" : "Document failed validation"
}})

您的模式无法验证电子邮件,您可以查看它

在模式中使用这个正则表达式=^\w+@[a-zA-Z_]+?[a-zA-Z]{2,3}$


希望对您有所帮助首先,您可能应该在创建验证器时使用正则表达式而不是字符串。请参阅文档,它的文档记录得不是很好,但在查询表达式部分下有一个示例,展示了如何定义正则表达式验证

你也应该考虑验证电子邮件是一个相当复杂的操作,并且大多数情况下,如果不是所有的正则表达式都会过滤掉有效的电子邮件。你通常应该选择一种更具防御性的电子邮件验证方法,这样你就不会丢失有效的电子邮件

您可以找到电子邮件正则表达式列表,并选择最适合您需要的正则表达式

我希望MongoDB能够接受电子邮件“email@email.com“格式

从技术上讲,这是一个而不是一个电子邮件地址,所以很荣幸能准确地澄清你的问题。即使您只讨论一个SMTP地址规范(还有其他类型的电子邮件地址),语法仍然是

虽然您可以使用“一网打尽”解决方案(适用于大多数情况),但您可能希望排除带引号的邮箱名称、排除数字IP地址,并需要完全限定的DNS名称,因此应遵循以下原则:

/[a-z0-9\._%+!$&*=^|~#%{}/\-]+@([a-z0-9\-]+\.){1,}([a-z]{2,22})/
(您可能希望添加锚,以禁止前导/训练空格,除非您在其他地方修剪字符串)


(但请注意,这并不能证明该地址有MX记录,也不能证明该地址的SMTP服务器将接收邮箱的电子邮件,也不能证明提供数据的人控制邮箱)

对于json模式验证程序,您可以使用
格式
功能作为替代方法:

validator: {
    $jsonSchema : {
        bsonType: "object", 
        required: ["email"],
    properties: {
        "email": {type: "string", format: "email"}
}}}})

第二个链接回答了我的问题。谢谢。在我修改[a-z0-9\.+!$&*=^ | ~{}\\\-]+@([a-z0-9\-]+\.{1,}([a-z]{2,22})后,您的模式工作正常。具体地说,在这一部分中~#%{}\\-]您的正则表达式不包括类似此名称的电子邮件+mod@gmail.com