求一个匹配多邮箱的正则表达式(在线等)

需求如下:
1.邮箱之间用英文分号分割;
2.输入的邮箱有可能有中文,大写字母之类的东西
3.正常的邮箱的验证要求
4,验证字符串:
1:sjkak@sads.com
2:asdjl123@123.com
3:ASD@qq.com
4:asdasd@sadasd.com;
5:中文12saAS@asd.com
6:sjkak@sads.com;sdasd@sadasd.com;文12saAS@asd.com;
7:sjkak@sads.com;sdasd@sadasd.com;文12saAS@asd.com
8:asdasdsad
9:asdasd@sadasd.com;asdasdsad
10:asdasd@sadasd.com;123ASD中文
11.ajsldjjadl@ajslkdjsaldjasld
如上

模式采用 /\w+?@\S+?\.com[.cn]?[;]?/mg

 console.log(/\w+?@\S+?\.com[.cn]?[;]?/mg.test('sjkak@sads.com'));
console.log(/\w+?@\S+?\.com[.cn]?[;]?/mg.test('asdjl123@123.com'));
console.log(/\w+?@\S+?\.com[.cn]?[;]?/mg.test('ASD@qq.com'));
console.log(/\w+?@\S+?\.com[.cn]?[;]?/mg.test('asdasd@sadasd.com;'));
console.log(/\w+?@\S+?\.com[.cn]?[;]?/mg.test('中文12saAS@asd.com'));
console.log(/\w+?@\S+?\.com[.cn]?[;]?/mg.test('sjkak@sads.com;sdasd@sadasd.com;文12saAS@asd.com;'));
console.log(/\w+?@\S+?\.com[.cn]?[;]?/mg.test('sjkak@sads.com;sdasd@sadasd.com;文12saAS@asd.com'));
console.log(/\w+?@\S+?\.com[.cn]?[;]?/mg.test('asdasdsad'));
console.log(/\w+?@\S+?\.com[.cn]?[;]?/mg.test('asdasd@sadasd.com;asdasdsad'));
console.log(/\w+?@\S+?\.com[.cn]?[;]?/mg.test('asdasd@sadasd.com;123ASD中文'));
console.log(/\w+?@\S+?\.com[.cn]?[;]?/mg.test('ajsldjjadl@ajslkdjsaldjasld'));
function isEmail(str){ var reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/; return reg.test(str); } var str = 'test@hotmail.com'; document.write(isEmail(str)+'<br />'); var str2 = 'test@sima.vip.com'; document.write(isEmail(str2)+'<br />'); var str3 = 'te-st@qq.com.cn'; document.write(isEmail(str3)+'<br />'); var str4 = 'te_st@sima.vip.com'; document.write(isEmail(str4)+'<br />'); var str5 = 'te.._st@sima.vip.com'; document.write(isEmail(str5)+'<br />');
 <script type="text/javascript"> 
function isEmail(str){ 
var reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/; 
return reg.test(str); 
} 
var str = 'test@hotmail.com'; 
document.write(isEmail(str)+'<br />'); 
var str2 = 'test@sima.vip.com'; 
document.write(isEmail(str2)+'<br />'); 
var str3 = 'te-st@qq.com.cn'; 
document.write(isEmail(str3)+'<br />'); 
var str4 = 'te_st@sima.vip.com'; 
document.write(isEmail(str4)+'<br />'); 
var str5 = 'te.._st@sima.vip.com'; 
document.write(isEmail(str5)+'<br />'); 
</script> 

[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}
这个正则你看行么

这个应该是最简单的了。用的 JavaScript 语法

 var reg = /[\w]+?@[\s]+?\.com[.cn]?/g

邮件名称部分:

汉字在正则中表示为[\u4e00-\u9fa5]
字母和数字表示为A-Za-z0-9
因此邮件名称部分的正则表达式整理如下:
[A-Za-z0-9\u4e00-\u9fa5]+
邮件域名部分:

一般域名的规律为“[N级域名][三级域名.]二级域名.顶级域名”,比如“qq.com”、“www.qq.com”、“mp.weixin.qq.com”、“12-34.com.cn”,分析可得域名类似“xx .xx .xx .xx”组成。

“xx”部分可以表示为[a-zA-Z0-9_-]+
“.xx”部分可以表示为.[a-zA-Z0-9_-]+
多个“.xx”可以表示为(.[a-zA-Z0-9_-]+)+
得出域名部分的表达式为[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+。

我们综合上面两部分得出最终表达式:
[[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+[;]{0,}]+

  var reg = /^((([a-z0-9_.-]+)@([\da-z.-]+).([a-z.]{2,6}\;))*(([a-z0-9_.-]+)@([\da-z.-]+).([a-z.]{2,6})))$/;

^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+.([a-zA-Z0-9.-_])+$

function Isyx(yx) {
var reyx = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/;
return (reyx.test(yx));
}

匹配邮箱的正则表达式:^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$

如果要验证邮箱是否有效可以找网上的邮箱验证接口

我已经有能实现需求的答案了,感觉回答问题的大神好少啊这儿...上面的各位虽然没帮上忙,但是都谢谢了

function Isyx(yx) {
var a = 0;
var b = false;
var fgyx = yx.split(';');
for (var i = 0; i < fgyx.length; i++) {
var reyx = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/;
b = reyx.test(fgyx[i]);
if (b) {
a = i;
}
}
return "第" + a + "邮箱错误";
}
循环判断一下不就可以了;

/(^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+.[a-zA-Z0-9_-]+$)|(^$)/;

至于为什么不能多次使用 test,而每次都要新建一个对象来用 test。我们看一段引用:javascript regex test,注意看这句话:*test() called multiple times on the same global regular expression instance will advance past the previous match.*。意即:_在相同的全局正则表达式实例上多次调用test将会越过之前的匹配_。这就是为什么你之前说匹配不对的原因。

至于如何提取出来你想要的邮箱。可以看一下如下代码:

var mailReg = /(\w+?@\S+?\.com[.cn]?)[;]?/mg;
var result  = undefined;
while (result = mailReg.exec('sjkak@sads.com;sdasd@sadasd.com;文12saAS@asd.com'))
    console.log(result[1])

失误。所有的规则,改成这样:
'''
var mailReg = /([\w\W]+?@\S+?.com[.cn]?)[;]?/mg;
var result = undefined;
while (result = mailReg.exec('sjkak@sads.com;sdasd@sadasd.com;文12saAS@asd.com'))
console.log(result[1])
'''
最简单的办法!答主可以采纳了!

^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$

^[A-Z0-9._%-]+@[A-Z0-9.-]+.[A-Z]{2,4}$

/\w+?@\S+?.com[.cn]?[;]?/mg

亲测有用

ORACLE中使用SQL的正则表达式判断邮箱格式

在数据库中,有时需要判断字符串是否是一个或者多个邮箱格式,可以使用如下语句判断:

SELECT COUNT(1)

FROM dual
WHERE regexp_like(v_mail,'^\w+((-\w+)|(.\w+))*\@[A-Za-z0-9]+((.|-)[A-Za-z0-9]+)*.[A-Za-z0-9]+(;{1,1}\w+((-\w+)|(.\w+))*\@[A-Za-z0-9]+((.|-)[A-Za-z0-9]+)*.[A-Za-z0-9]+)*$')