电子邮件验证 - @ 之前和点之前的字符长度

Email validation- characters length before @ and before dot

我使用以下正则表达式模式来验证工作正常的电子邮件地址,但是我需要验证 @ 之前的字符长度,这应该 NOT 少于 4 个字符。对于 @ 之后和点 . 之前的字符长度,我应该采用相同的规则。

例如,此电子邮件地址有效:a@b.c

但是,这个应该是有效的:abcd@abcd.com

我该怎么做?

这是我目前的尝试:

<ui:define name="validation-tag">
    <f:validateRegex 
        pattern="([\w\.-]*[a-zA-Z0-9_]@[\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z])*"
        for="contactEmailAddress" />
</ui:define>

您可以在一系列有效字符后使用 {4,} 来指定您至少需要其中的一个。所以尝试以下模式:

(([\w\.-]*[a-zA-Z0-9_]){4,}@([\w\.-]*[a-zA-Z0-9]){4,}\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z])*

我们可以使用带有锚点的正向预测来施加长度限制。

^(?=[^@]{4,}@)([\w\.-]*[a-zA-Z0-9_]@(?=.{4,}\.[^.]*$)[\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z])$

^$ 将使字符串在开始和结束时匹配,然后 (?=[^@]{4,}@) 将确保我们在第一个 @ 之前至少有 4 个字符, 和 (?=.{4,}\.[^.]*$) 将确保最后一个 . 之前的部分至少有 4 个符号长。

demo

小心过于复杂的电子邮件正则表达式。无论如何,用户仍然会犯错误(例如 tom@mycompny.com 而不是 tom@mycompany.com),并且您可能会出现漏报。

也许像 /.*\@(.{2,}\.)+.{2,}/ (test it here) 这样的东西就足够了。