正则表达式匹配电子邮件用户名,除了 10 个连续数字(如果以 1 开头则为 11)

Regex to match email username except for 10 consecutive digits (or 11 if it starts with 1)

我的电子邮件验证器需要一个正则表达式。我不想让用户输入整个 phone 数字作为 email 用户名。如果用户输入所有数字:

123456789@test.com // allowed (9 digits or less)
01234567890@test.com // allowed (11 digits but not starting with 1)
123456789012@test.com // allowed (12 digits or more)

0123456789@test.com // NOT allowed (10 digits)
11234567890@test.com // NOT allowed (11 digits and starting with 1)

有一个非常接近的答案 我试过了

<input 
    type="email" 
    pattern="(?:^|(?<=\s))(?!\d{10}|1\d{10})(\w[\w\.]*@\w+\.[\w\.]+)\b"
/>

但是排除部分 (?!\d{10}|1\d{10}) 对我不起作用。我想允许 12 位或更多位数字。

谢谢

您可以尝试向您的正则表达式添加否定前瞻,如下所示:

(?:^|(?<=\s))(?!1?\d{10}@)(\w[\w\.]*@\w+\.[\w\.]+)\b 
             -------------

Click for Demo

我刚刚将子模式 (?!1?\d{10}@) 添加到您的正则表达式中,它不允许当前位置后跟(可选数字 1 后跟 10 个数字后跟 @)