>我必须为电子邮件制作正则表达式。只允许在@符号之前有字母或数字,可以选择只在开头不能的点。在@符号之后,只允许有字母或数字,正好有一个点,点之后至少2个字符。
这就是我的表情
/([a-zA-Zd*])+(.?)([a-zA-Zd*])*@{1}([a-zA-zd*])+(.){1}([a-zA-Zd*]){2,}/
整封电子邮件应该有 10 到 30 个字符,我不知道该怎么做。
谢谢
实际上,您可以在模式前面加上一个前瞻和量词来匹配 10 到 30 个字符: (?=^.{10,30}$)
然后,您的模式如下所示:
(?=^.{10,30}$)([a-zA-Zd*])+(.?)([a-zA-Zd*])*@{1}([a-zA-zd*])+(.){1}([a-zA-Zd*]){2,}
演示
允许重复的语法范围为 {n,m}
。 你写{1}
的意思是"正好一个",这是没有意义的。 {10,30}
是您正在寻找的范围。
另外,知道"字母"的转义码。 w
是"字字",与[a-zA-Z0-9_]
相同。为什么字符范围中有"*"?
所以问题是你的部分最终可能是不同长度的,完成后需要检查总数,对吧?
在Perl中,你可以包含代码作为断言。 因此,包括(?{ length($&) <= 30 })
作为最终断言。
^(?=^.{10,30}$)(?=^[A-Za-z0-9])[A-Za-z0-9.]+@[A-Za-z0-9]+.[A-Za-z]{2,}$
https://regex101.com/r/cBACF2/10
应在 10 到 30 (?=^.{10,30}$)
之间从字母和数字开始(?=^[A-Za-z0-9])
包含字母和数字以及点[A-Za-z0-9.]
最后一个点之后至少有两个字母 [A-Za-z]{2,}