如何防止regex验证@字符后的双点



我在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

最新更新