我在js 中使用以下正则表达式
^[a-zA-Z0-9._+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$
这将验证子域中的电子邮件(例如:myname@google.co.in
)不幸的是,双点也被验证为真,例如
myname@..in
myname@domain..in
我知道@[a-zA-Z0-9.-]
部分要修改,但有点被打动了。最好的方法是什么。
TIA
尝试使用:
^([w+-]+.)*[w+-]+@([w+-]+.)*[w+-]+.[a-zA-Z]{2,4}$
我已经在char组中用完全等价的w
替换了[a-zA-Z0-9_]
。
注意,在regex语言中,点.
是一个特殊的字符,它匹配所有内容(但换行符除外)。因此,要匹配一个文字点,需要对其进行转义.
。
Legenda:
- 字符串的
^
开头 ([w+-]+.)*
零个或多个正则表达式单词(除了加+
和减-
之外),由1个或更多个字符和一个文字点.
组成- 1个或多个字符的
[w+-]+
正则表达式字(加上[+-]
) @
文字字符([w+-]+.)*[w+-]+
与上述序列相同.[a-zA-Z]{2,4}
文字点,后跟长度在2到4个字符之间的小写或大写字符序列- 字符串的
$
结尾
试试这个:
^([a-zA-Z0-9._+-]+)(@[a-zA-Z0-9-]+)(.[a-zA-Z]{2,4}){2,}$
你可以在这里测试它-https://regex101.com/r/Ihj8sd/1