Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to format and validate email node js

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!

like image 828
RAL Avatar asked Sep 22 '18 11:09

RAL


People also ask

How do I validate an email address in node JS?

How Do I Check if An Email is Valid in Node? You can verify email addresses in Node and perform Node email validation easily by utilizing Deep Email Validator. It can perform the validation effectively by checking the local part for common typos, DNS records, and the SMTP server response.


2 Answers

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

like image 92
Daniel Barral Avatar answered Oct 17 '22 14:10

Daniel Barral


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.

like image 19
gr4viton Avatar answered Oct 17 '22 16:10

gr4viton