【发布时间】:2010-05-06 08:06:05
【问题描述】:
所以,我有这个 JavaScript 函数:
ME.Utils = {
RxEmail: new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i),
ValidateEmail: function(email) {
return ME.Utils.RxEmail.test(email);
},
GetEmailAddresses: function(text) {
return text.match(ME.Utils.RxEmail);
},
HasEmail: function(text) {
return ME.Utils.GetEmailAddresses != null;
}
};
ValidateEmail 效果很好。但是,HasEmail 和 GetEmailAddresses 无法正常工作。
GetEmailAdresses 始终返回 null,除非字符串仅包含电子邮件地址。在这种情况下,GetEmailAdresses 返回一个数组,不仅包含电子邮件地址,还包含电子邮件地址 (test@test.com),仅包含 id (test) 以及一些未识别的等...
你能帮我弄清楚我的表达有什么问题吗?
【问题讨论】:
-
哦,看。有人正在尝试使用正则表达式测试电子邮件地址。我最后一次看到成功的人是什么时候?不是今天,它会拒绝带有 + 字符的电子邮件地址。
-
请不要再嘲笑我了。帮帮我,或者什么都不说……
-
@odeo,没那么简单。见ex-parrot.com/~pdw/Mail-RFC822-Address.html 和stackoverflow.com/questions/201323/…,甚至那个怪物也需要先进行一些剥离
-
关于定期在此处使用正则表达式裁剪解析电子邮件地址的问题,它们通常对常见的地址样式有误报。我不是在嘲笑你,我是在对人们未能从历史中吸取教训并一遍又一遍地犯同样的错误表示沮丧。正则表达式不适合深入解析电子邮件地址,但人们坚持一次又一次地尝试和失败。雅虎!是一家以网络为基础的大公司,但他们无法做到正确:twitter.com/edent/status/11687784947 - 但许多小鱼认为他们可以。
-
@h2g2java:每隔几天试试:stackoverflow.com/search?q=email%20[regex]&tab=newest
标签: javascript regex validation