'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!
Solution 1:[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:[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:[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
Solution 4:[4]
I like validator.js
from the docs:
var validator = require('validator');
validator.isEmail('[email protected]');
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | |
Solution 2 | Daniel Barral |
Solution 3 | Mohammed Muzammil |
Solution 4 | 2JN |