I am trying to create a custom Regex to validate emails that follow the rules stated below:
I have two arrays: trueEmails
contains valid emails and notEmails
contains invalid emails.
I created the following Regex:
const email = /^[a-zA-Z]+(\d|.|\w)*@[a-zA-Z]+.[a-zA-Z]+.*[a-zA-Z]+$/;
My Regex is not working for rule no. 2, 3, 4 and 6. Here is my code.
const notEmails = [
// rule 1
'_test@email.com',
'#test@email.com',
'1test@email.com',
// rule 2
'test&131@yahoo.com',
// rule 3
'test@gmail@yahoo.com',
// rule 4
'test@yahoo23.com',
// rule 5
'test@yahdsd.com.',
// rule 6
'white space@gmail.com'
]
const trueEmails = [
// rule 1
'test@email.com',
// rule 2
'test2email@yahoo.com',
'test_email@yahoo.com',
'test.123_.emai.l@yahoo.com',
// rule 3
'test@gmail.com',
// rule 4
'testsample@yahoo.co.in',
// rule 5
'testdample232@gmail.com',
// rule 6
'no_white_space@gmail.com'
]
const email = /^[a-zA-Z]+(\d|.|\w)*@[a-zA-Z]+.[a-zA-Z]+.*[a-zA-Z]+$/;
console.log("NotEmails, should return false")
console.log(notEmails.map((each) => each + ' => ' + email.test(each)));
console.log("trueEmails, should return true")
console.log(trueEmails.map((each) => each + ' => ' + email.test(each)));
Thanks in advance.
I've updated the regex to work for you. It's not fool proof but works for the restrictions you've put in place.
const notEmails = [
// rule 1
'_test@email.com',
'#test@email.com',
'1test@email.com',
// rule 2
'test&131@yahoo.com',
// rule 3
'test@gmail@yahoo.com',
// rule 4
'test@yahoo23.com',
// rule 5
'test@yahdsd.com.',
// rule 6
'white space@gmail.com'
]
const trueEmails = [
// rule 1
'test@email.com',
// rule 2
'test2email@yahoo.com',
'test_email@yahoo.com',
'test.123_.emai.l@yahoo.com',
// rule 3
'test@gmail.com',
// rule 4
'testsample@yahoo.co.in',
// rule 5
'testdample232@gmail.com',
// rule 6
'no_white_space@gmail.com'
]
const email = /^[a-zA-Z]+[a-zA-Z0-9_.]+@[a-zA-Z.]+[a-zA-Z]$/;
console.log("NotEmails, should return false")
console.log(notEmails.map((each) => each + ' => ' + email.test(each)));
console.log("trueEmails, should return true")
console.log(trueEmails.map((each) => each + ' => ' + email.test(each)));
Description
Regex: /^[a-zA-Z]+[a-zA-Z0-9_.]+@[a-zA-Z.]+[a-zA-Z]$/
^
Start of line[a-zA-Z]
any character from a-z+
one or more times[a-zA-Z0-9_.]
any character from a-z, and number, underscores and periods.+
one or more times@
matches literal @ sign[a-zA-Z.]+
any character from a-z and periods+
one or more times$
end of line