How to format and validate email node js

27,226

Solution 1

Use regular expression something like that:

Solution 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])?)*$

Sample code:

const emailToValidate = '[email protected]';
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));

Solution 2:

Because you use angular, you are able to validate the email on front-end side by using Validators.email.

If you check angular source code of Validators.email here, you will find an EMAIL_REGEXP const variable with the following value:

/^(?=.{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])?)*$/;

You could use it on back-end side too, to validate the input.

Solution 2

You can use email validator module:

var validator = require("email-validator");
validator.validate("[email protected]");

Or, if you don't want any dependencies:

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;
}

Source:

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

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

Solution 3

In my project i've used email-validator module

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');
}

You can install the module from below link

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

Share:
27,226
RAL
Author by

RAL

Updated on July 09, 2022

Comments

  • RAL
    RAL almost 2 years

    I would like that email had format like: [email protected].

    Which is the best way to do it?

    I have a component for registration and I have the field like this:

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

    In my usersRouter I have the function for registration:

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

    Also, I use mongo and in the UserSchema I have this for the email:

    email: {
            type: String,
            required: true
    }
    

    Thanks!

  • Daniel Barral
    Daniel Barral over 4 years
    Bear in mind that the above solutions allows emails without TLD, like this: a@a
  • Muhammad Abubakar Zorrain
    Muhammad Abubakar Zorrain almost 2 years
    there is a problem with timeout. I use email-validator but sometime it show an error as "{"message":"Please provide a valid email address.","reason":"Timeout"}" so my question is how to get rid of this timeout error. Note: when I send mail to this same address by usying gmail account, it is sending.
  • Muhammad Abubakar Zorrain
    Muhammad Abubakar Zorrain almost 2 years
    there is a problem with timeout. I use email-validator but sometime it show an error as "{"message":"Please provide a valid email address.","reason":"Timeout"}" so my question is how to get rid of this timeout error. Note: when I send mail to this same address by usying gmail account, it is sending.