使用Javascript中的正则表达式验证带有文件夹的电子邮件地址

使用Javascript中的正则表达式验证带有文件夹的电子邮件地址,javascript,regex,validation,Javascript,Regex,Validation,我正在编写一个正则表达式来验证JavaScript中的电子邮件地址 /^[a-zA-Z]([\w-\.]{4,29})+@([\w-]+\.)+[a-zA-Z]{2,3}$/ 这很好用。但是还有一个额外的要求,比如“在GMAIL地址中,我们可以指定文件夹名称以及邮件将发送到的电子邮件id。例如,james+office@gmail.com,邮件将被发送到下的文件夹“office”james@gmail.com的收件箱 那么我如何在上面的正则表达式中验证它呢?加号不是强制性的,但是如果添加了+的

我正在编写一个正则表达式来验证JavaScript中的电子邮件地址

/^[a-zA-Z]([\w-\.]{4,29})+@([\w-]+\.)+[a-zA-Z]{2,3}$/
这很好用。但是还有一个额外的要求,比如“在GMAIL地址中,我们可以指定文件夹名称以及邮件将发送到的电子邮件id。例如,james+office@gmail.com,邮件将被发送到下的文件夹“office”james@gmail.com的收件箱

那么我如何在上面的正则表达式中验证它呢?加号不是强制性的,但是如果添加了+的话,它应该在@symbol之前的其他字符之间,使用这个:

/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i
改用这个:

/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i

我在您需要的场景中尝试了这个正则表达式,效果很好

^([a-zA-Z0-9\-\.\+]+)(\[[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.\)([a-zA-Z0-9\-]+)([a-zA-Z]{2,4}.[0-9]{1,3}.)(\]?)

试一试

谢谢,
希望它能有所帮助

我在您需要的场景中尝试了这个正则表达式,效果很好

^([a-zA-Z0-9\-\.\+]+)(\[[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.\)([a-zA-Z0-9\-]+)([a-zA-Z]{2,4}.[0-9]{1,3}.)(\]?)

试一试

谢谢,
希望它有帮助

您可以简单地将
+
字符添加到您的字符类中,并在
@
之前使用否定匹配。注意我从点中删除了转义序列,并将连字符移动为最后一个字符,否则您需要转义它,并且还实现了
I
modi的使用fier用于不区分大小写的匹配

/^[a-z]([\w.+-]{4,29})[^+]@([\w-]+\.)+[a-z]{2,3}$/i

您只需在character类中添加
+
字符,并在
@
之前使用否定匹配。注意我从点中删除了转义序列,并将连字符移动为最后一个字符,否则您需要转义它,并且还实现了对c使用
I
修饰符ase不敏感匹配

/^[a-z]([\w.+-]{4,29})[^+]@([\w-]+\.)+[a-z]{2,3}$/i

这到底是什么?不是太长了吗?这是一个验证电子邮件地址的标准正则表达式,非常健壮。我尝试在regex101.com中运行它,但它不起作用。这到底是什么?不是太长了吗?这是一个验证电子邮件地址的标准正则表达式,非常健壮。我尝试在r中运行它我同意将其添加到
[\w.+-]
,因为您的初始正则表达式似乎并不真正关心某些字符出现在哪里,例如,您允许在
@
前面加一个点……那么为什么现在也允许
+
出现在那里呢+1@hwnd你误解了我说的话。是的,它应该在@之前,但在用户名之间“就像詹姆斯一样+office@gmail.com,不像james+@gmail.com那样无效。这就打断了您提供的上述正则表达式。@VishnuY我更新了我的答案,这就是您想要的吗?@hwnd您节省了我的时间。:)我同意将其添加到
[\w.+-]
中,因为您的初始正则表达式似乎并不真正关心某些字符出现的位置,例如,您在
@
前面允许一个点。。。那么为什么现在也允许
+
在那里呢+1@hwnd你误解了我说的话。是的,它应该在@之前,但是像james一样在用户名之间+office@gmail.com,不像james+@gmail.com那样无效。这就打断了您提供的上述正则表达式。@VishnuY我更新了我的答案,这就是您想要的吗?@hwnd您节省了我的时间。:)