我正在尝试将电子邮件地址的正则表达式与以下条件相匹配。
字符串不得超过 40 个字符。
字符串匹配 emailid@domain 格式,其中 emailid 和域都只包含小写英文字母、数字和句点 (.)
域应至少包含一个句点 (.)
电子邮件 ID 和域都不能包含任何连续的句点 (.)
到目前为止,我只能用这个正则表达式满足第二个条件:
/^[a-z0-9.]+@[a-z0-9.-]+\.[a-zA-Z]{2,6}$/
任何想法,我怎样才能完成其他条件?
我正在尝试将电子邮件地址的正则表达式与以下条件相匹配。
字符串不得超过 40 个字符。
字符串匹配 emailid@domain 格式,其中 emailid 和域都只包含小写英文字母、数字和句点 (.)
域应至少包含一个句点 (.)
电子邮件 ID 和域都不能包含任何连续的句点 (.)
到目前为止,我只能用这个正则表达式满足第二个条件:
/^[a-z0-9.]+@[a-z0-9.-]+\.[a-zA-Z]{2,6}$/
任何想法,我怎样才能完成其他条件?
TA贡献1657条经验 获得超13个赞
您可以使用单个否定前瞻来确保字符串不包含 41 个字符。
如果您重复不带句点的字符类 1 次或多次,然后有选择地重复以句点开头的组,则会阻止匹配连续的句点。
这部分\.[a-zA-Z]{2,6}$
已经确保至少有一个周期。
^(?!.{41})[a-z0-9]+(?:\.[a-z0-9]+)*@[a-z0-9-]+(?:\.[a-z0-9-]+)*\.[a-zA-Z]{2,6}$
请注意,因为-
仍然在这个字符类中[a-z0-9-]+
,连续的连字符仍然是可能的。如果你不想允许这个,你可以使用
^(?!.{41})[a-z0-9]+(?:\.[a-z0-9]+)*@[a-z0-9]+(?:[.-][a-z0-9-]+)*\.[a-zA-Z]{2,6}$
TA贡献1761条经验 获得超6个赞
使用积极的前瞻:
/(?=^[a-z0-9.]+@[a-z0-9.-]+\.[a-zA-Z]{2,6}$)(?=^.{1,40}$)/
"(?=match this expression)(?=match this too)(?=oh, and this)"
举报