我的自定义 Regex 电子邮件验证器未按预期工作

My custom Regex email validator is not working as intended

我正在尝试创建自定义正则表达式来验证遵循以下规则的电子邮件:

  1. 电子邮件应以字母 (a-z) 开头,不应以特殊字符或数值开头
  2. 首字母后可包含数字(0-9)、字母(a-z)、下划线(_)和点(.)
  3. 里面应该只有一个@符号
  4. 在@符号后,只允许包含字母和点(除点(.)外不能再有特殊字符或数字)
  5. 电子邮件不应以点 (.) 结尾,而应以字母结尾
  6. 它不应该有任何空格

我有两个数组:trueEmails 包含有效电子邮件,notEmails 包含无效电子邮件。

我创建了以下正则表达式:

const email = /^[a-zA-Z]+(\d|.|\w)*@[a-zA-Z]+.[a-zA-Z]+.*[a-zA-Z]+$/;

我的正则表达式不适用于第 1 条规则。 2、3、4 和 6。这是我的代码。

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

提前致谢。

我已经更新了正则表达式以供您使用。它不是万无一失的,但适用于您设置的限制。

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

描述

正则表达式:/^[a-zA-Z]+[a-zA-Z0-9_.]+@[a-zA-Z.]+[a-zA-Z]$/

  • ^ 行首
  • [a-zA-Z] 来自 a-z
  • 的任意字符
  • + 一次或多次
  • [a-zA-Z0-9_.] 来自 a-z 的任何字符,以及数字、下划线和句点。
  • + 一次或多次
  • @ 匹配文字 @ 符号
  • [a-zA-Z.]+ 来自 a-z 和句点
  • 的任意字符
  • + 一次或多次
  • [a-zA-Z]` a-z
  • 中的任何字符
  • $行尾