我有一个正则表达式,我用来验证电子邮件地址.我喜欢这个正则表达式,因为它相当放松,并且已经证明可以很好地工作.
这是正则表达式:
(['\"]{1,}.+['\"]{1,}\s+)?<?[\w\.\-]+@[^\.][\w\.\-]+\.[A-Za-z]{2,}>?
Run Code Online (Sandbox Code Playgroud)
好的,基本上你可以抛出的所有合理有效的电子邮件地址都将验证.我知道甚至可能会出现一些无效的问题,但这对我的特定用例来说是可以接受的.
现在恰好是joe@x.com没有验证的情况.并猜测x.com实际上是一个存在的域名(由paypall拥有).
查看验证域名的正则表达式部分:
@[^\.][\w\.\-]+
Run Code Online (Sandbox Code Playgroud)
看起来这应该能够解析x.com域名,但事实并非如此.罪魁祸首是检查域名不能以点开头的部分(例如test @ .test.com)
@[^\.]
Run Code Online (Sandbox Code Playgroud)
如果我删除[^]我正则表达式的域x.com验证,但现在正则表达式允许域的名称以一个点,比如.test.com开始的一部分; 这对我来说有点太放松了;-)
所以我的问题是如何能负字符列表部分影响我的单个字符检查,基本上我读的正则表达式的方法是:"确保该字符串不以一个点开始",但apparantly它做更多.
任何帮助,将不胜感激.
问候,
克瓦
正如Luis建议的那样,你可以使用[^\.][\w\.\-]*匹配domtain名称,但现在它也会匹配地址,如john@x.....com和john@@.com.您可能希望确保一次只有一个句点,并且@之后的第一个字符比仅仅不是句点更受限制.
使用以下方法匹配域名和期间(以及子域及其期间):
([\w\-]+\.)+
Run Code Online (Sandbox Code Playgroud)
所以你的模式是:
(['\"]{1,}.+['\"]{1,}\s+)?<?[\w\.\-]+@([\w\-]+\.)+[A-Za-z]{2,}>?
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2415 次 |
| 最近记录: |