【问题标题】:How to format and validate email node js如何格式化和验证电子邮件节点 js
【发布时间】:2019-02-26 14:12:19
【问题描述】:

我希望该电子邮件的格式如下:a@b.c.

最好的方法是什么?

我有一个注册组件,我有这样的字段:

<mat-form-field>
              <input matInput placeholder="Email" name="email" [(ngModel)]="email" required>
</mat-form-field>

在我的 usersRouter 中,我有注册功能:

router.post('/users/register', (req, res) => {
        ...
        const user = new User({
            ...
            email: req.body.email,
            ...
        });
     ...
});

另外,我使用 mongo,在 UserSchema 中我有这个用于电子邮件:

email: {
        type: String,
        required: true
}

谢谢!

【问题讨论】:

标签: node.js angular validation email express


【解决方案1】:

在我的项目中,我使用了电子邮件验证器模块

npm i email-validator


const emailvalidator = require("email-validator");
if(emailvalidator.validate(req.body.email)){
      // Your call to model here
}else{
   res.status(400).send('Invalid Email');
}

您可以从以下链接安装模块

https://www.npmjs.com/package/email-validator

【讨论】:

    【解决方案2】:

    您可以使用电子邮件验证器模块:

    var validator = require("email-validator");
    validator.validate("test@email.com");
    

    或者,如果您不想要任何依赖项:

    var emailRegex = /^[-!#$%&'*+\/0-9=?A-Z^_a-z{|}~](\.?[-!#$%&'*+\/0-9=?A-Z^_a-z`{|}~])*@[a-zA-Z0-9](-*\.?[a-zA-Z0-9])*\.[a-zA-Z](-?[a-zA-Z0-9])+$/;
    
    function isEmailValid(email) {
        if (!email)
            return false;
    
        if(email.length>254)
            return false;
    
        var valid = emailRegex.test(email);
        if(!valid)
            return false;
    
        // Further checking of some things regex can't handle
        var parts = email.split("@");
        if(parts[0].length>64)
            return false;
    
        var domainParts = parts[1].split(".");
        if(domainParts.some(function(part) { return part.length>63; }))
            return false;
    
        return true;
    }
    

    来源:

    https://www.npmjs.com/package/email-validator

    https://github.com/manishsaraan/email-validator/blob/master/index.js

    【讨论】:

      【解决方案3】:

      使用类似的正则表达式:

      解决方案 1:

      ^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$
      

      示例代码:

      const emailToValidate = 'a@a.com';
      const emailRegexp = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
      
      console.log(emailRegexp.test(emailToValidate));
      

      解决方案 2:

      由于您使用 Angular,您可以使用 Validators.email 在前端验证电子邮件。

      如果您检查 Validators.email here 的 Angular 源代码,您会发现一个具有以下值的 EMAIL_REGEXP const 变量:

      /^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/;
      

      您也可以在后端使用它来验证输入。

      【讨论】:

      • 请记住,上述解决方案允许没有 TLD 的电子邮件,例如:a@a
      猜你喜欢
      • 2019-02-27
      • 1970-01-01
      • 2017-10-23
      • 2014-07-28
      • 1970-01-01
      • 2020-08-14
      • 1970-01-01
      • 1970-01-01
      • 2019-06-27
      相关资源
      最近更新 更多