正版电子邮件地址的正则表达式验证器,在@

时间:2018-01-31 14:39:07

标签: javascript regex

我试图找出首先检查字符串是否是有效电子邮件地址的javascript正则表达式验证程序,然后检查@符号之前是否有10个且只有10个数字。我想出了这个:

/[0-9]\@+@\S+\.\S+/

......但那不对。我一直在关注this stack post,但无法弄清楚如何将@之前的数字检查与电子邮件验证工具结合起来。

最终我需要一个函数,如果字符串匹配我的模式,则返回true,否则返回false。提前谢谢。

示例字符串:8015551234@foobar.com

2 个答案:

答案 0 :(得分:2)

var r = /^\d{10}@\S+\.\S+$/,
    a = [
          '801555123@foobar.com',   // Too short
          '80155512341@foobar.com', // Too long
          'notNumbers@foobar.com', 
          '8015551234@foobar.com'   // Just right
        ]

a.forEach(function(s) {
  console.log(r.test(s))
})

解释

  • ^在行首处断言位置
  • \d{10}完全匹配10位数字
  • @按字面意思匹配
  • \S+匹配一个或多个非空白字符
  • \.按字面匹配
  • \S+匹配一个或多个非空白字符
  • $断言行尾的位置

答案 1 :(得分:0)

使用以下RegEx:

/(?<=(\s|^))[0-9]{10}\@+[a-zA-Z0-9_.-]+/

请参阅live demo (Regex101)

如果在数字序列之前不需要空格(即,如果这些数字不需要构成整个本地名称[@]之前的部分),则删除lookbehind部分((?<=\s*)

<强>解释

  • @
  • 之前检查10位数字
  • 使用负向反馈检查数字部分之前的空格字符或字符串的开头。
  • 在符号
  • 后检查语法格式正确的域名

备注

  • '语法良好'应理解为绝对低级别:域名受各种未经验证的约束(例如,以顶级域名结尾)。 Regexen将是错误的工具。

  • 对域名部分的检查不符合国际化域名。看看this SO answer以获得一个想法。

代码嵌入

将正则表达式转换为测试代码,如下所示:

[
      '123456789@example.com            '
    , '12345678901@example.com          '
    , 'a1234567890@example.com          '
    , 'whatever@example.com             '
    , '1234567890@example.com           '
    , '1234567890@gargamel.smurf.com    '
    , ' 1234567890@a.strange.domain.name.but.hey.if.it.gets.resolved....org'     
].map ( function ( sample ) {
    return /(?<=(\s|^))[0-9]{10}\@+[a-zA-Z0-9_.-]+/.test(sample);
});