电子邮件地址长度验证的正则表达式

时间:2010-07-13 09:23:12

标签: regex

我们有一个文本框,接受以逗号分隔的电子邮件地址。正则表达式是

^(\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*\s*[,]?\b)*$.

但是现在我无法为此表达式添加长度验证。每个电子邮件地址不得超过150个字符。我试过了

^((\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)){1,150}\s*[,]?\b)*$. 

但它不起作用。 你能否修改正则表达式,以便它也实现这个验证。

5 个答案:

答案 0 :(得分:5)

为什么在只需检查字符串的长度时就可以使用正则表达式?如果必须,请使用第二个正则表达式:

^.{1,150}$

答案 1 :(得分:1)

我宁愿不要进一步使这个正则表达式复杂化,并在检查电子邮件匹配之前添加显式长度检查。在JavaScript中,它将类似于以下内容:

function validateEmail(email) {
    var regex = /^(\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*\s*[,]?\b)*$/;
    // 20 is used instead of 150 for sake of example
    return email.length <= 20 && regex.test(email);
}
// validateEmail("jdoe@example.com") == true
// validateEmail("loooooooooooooooooooonjohn@example.com") == false

顺便说一下,在你的正则表达式$之后的点似乎是一个错误,所以我在我的片段中跳过它。

答案 2 :(得分:1)

使用前瞻

/(?=^.{1,150}$)(your regex goes here)/

答案 3 :(得分:0)

^([a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]){0,70}$

答案 4 :(得分:0)

我到达这里寻找一种方法来扩展我的ng-pattern以获取Angular表单的电子邮件。

采用Rorick分别检查长度的方法,我找到了一个更简单的解决方案:只需在输入中设置ng-maxlength="150"即可。然后,您可以自定义一条错误消息,告知用户该电子邮件太长。

maxlength="150"也可以正常工作,防止将任何额外字符添加到字段中,但我喜欢ng-maxlength告诉您错误而不是截断字符串。