为什么我用于验证电子邮件地址的正则表达式出现“没有重复”的提示?

时间:2019-01-28 06:09:15

标签: javascript regex string

我正在学习如何使用正则表达式来验证符合以下条件的电子邮件地址:

如果

user@domain.extension domain extension example123.com ,并且 user 的值满足以下约束:

  • 它以字符类别[a-z]表示的1到6个小写英文字母开头
  • 小写字母后跟一个可选的下划线,即零个或一个出现的_字符
  • 可选下划线后跟0至4个由字符类[0-9]表示的可选数字

理想地...

re.test(logic@example123.com) --> should return true
re.test(logic_@example123.com) --> should return true
re.test(logic_0@example123.com) --> should return true
re.test(logic2_0@example123.com) --> should return false
re.test(logic_0@gmail.com) --> should return false

到目前为止,我有:const re = /^[a-z]{1,6}[_?][\d?]{0,4}+@[example123\.com]$/ig

我收到一条错误消息:“没有重复”。我已经浏览了其他stackoverflow帖子,但仍然无法完全理解为什么我的模式无法正常工作。

3 个答案:

答案 0 :(得分:1)

\d{0,4}+中,+不能作为{0,4}的量词,因此它没有“重复的内容”。可以是\d{0,4}\d+

此外,方括号用于字符范围或乱写字符。不要在[_?]中使用它们,在这里将其解释为搜索_?

由于您不想在电子邮件中使用大写字母,因此必须删除正则表达式中的i修饰符,该修饰符会忽略大小写。

尝试一下:

const re = /^[a-z]{1,6}_?\d{0,4}@example123\.com$/

console.log(re.test("logic@example123.com"));

答案 1 :(得分:0)

尝试一下:

^[a-z]{1,6}_?\d{0,4}?@(example123\.com)$

答案 2 :(得分:-1)

尝试使用此功能验证电子邮件

function validateEmail(sEmail) {

    var filter = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
    if (filter.test(sEmail)) {
        return true;
    } else {
        return false;
    }
}