【问题标题】:How to fix this json email pattern如何修复此 json 电子邮件模式
【发布时间】:2019-09-08 20:23:09
【问题描述】:

我正在创建 Collection USER,要求他添加电子邮件字段。

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

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"
}})

【问题讨论】:

    标签: javascript json mongodb validation design-patterns


    【解决方案1】:

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

    从技术上讲,这是一个ADDR_SPEC,而不是一个电子邮件地址,因此非常感谢您准确地阐明了您的问题。即使您只讨论单个 SMTP ADDR_SPEC(还有其他类型的电子邮件地址),语法仍然是 very flexible

    虽然您可以使用包罗万象的解决方案(this 适用于大多数情况),但您可能希望排除引用的邮箱名称、排除数字 IP 地址并需要完全限定的 DNS 名称,因此类似于:

    /[a-z0-9\._%+!$&*=^|~#%{}/\-]+@([a-z0-9\-]+\.){1,}([a-z]{2,22})/
    

    (并且您可能想要添加锚点以禁止前导/训练空格,除非您在其他地方修剪字符串)

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

    【讨论】:

    • 您的模式在我修改后有效 [a-z0-9\._%+!$&*=^|~#%{}\\-]+@([a-z0-9 \-]+\.){1,}([az]{2,22})。具体在这部分~#%{}\\-]
    【解决方案2】:

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

    您还应该考虑到验证电子邮件是一项非常复杂的操作,而且大多数(如果不是全部)正则表达式总是会过滤掉有效的电子邮件。您通常应该在电子邮件验证方面选择更具防御性的方法,这样您就不会丢失有效的电子邮件。

    您可以找到电子邮件正则表达式here 的列表,然后选择最适合您需求的电子邮件

    【讨论】:

    • 第二个链接回答了我的问题。谢谢。
    【解决方案3】:

    对于 json-schema 验证器,您可以使用 format 功能作为替代方法:

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

    【讨论】:

      【解决方案4】:

      您的模式无法验证您可以在其上查看的电子邮件

      https://regex101.com/

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

      希望对你有帮助

      【讨论】:

      • 你的正则表达式不包括像这个名字+mod@gmail.com这样的电子邮件
      猜你喜欢
      • 2023-03-11
      • 1970-01-01
      • 2018-07-23
      • 2015-08-03
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 2012-07-19
      相关资源
      最近更新 更多