'My custom Regex email validator is not working as intended

I am trying to create a custom Regex to validate emails that follow the rules stated below:

  1. Email should start with a alphabet (a-z) and should not start with special characters or numeric values
  2. after the first letter, it could contains numbers(0-9), letters(a-z), underscores(_) and dot(.)
  3. it should have only one @ symbol in it
  4. after the @ symbol, it should only allow to contain alphabets and dot (no more special characters or numbers other than dot(.))
  5. email should not end with dot(.) but rather end with an alphabet
  6. it should not have any whitespace anywhere

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
    '[email protected]',
    '#[email protected]',
    '[email protected]',
    // rule 2
    'test&[email protected]',
    // rule 3
    'test@[email protected]',
    // rule 4
    '[email protected]',
    // rule 5
    '[email protected].',
    // rule 6
    'white [email protected]'

]

const trueEmails = [
    // rule 1
    '[email protected]',
    // rule 2
    '[email protected]',
    '[email protected]',
    '[email protected]',
    // rule 3
    '[email protected]',
    // rule 4
    '[email protected]',
    // rule 5
    '[email protected]',
    // rule 6
    '[email protected]'
]

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.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source