[注意]你的系统中存在这个BUG吗?(正则表达式验证)

今天在做Email发送测试时发现总是有部份邮箱发送报异常,仔细检查后发这些异常的邮箱都是包含中文及全角字母的邮箱,经过一番检查,发现验证Email格式的方法不能区分包含中文的邮箱地址。这个验证方法的正则与ASPX网页中的验证方法是一样的,而网页中的邮箱验证是没问题的,为什么这个C#写的方法就是通不过呢?

反复测试才发现正则验证中要加RegexOptions.ECMAScript选项才能区分中文,ASP.NET网页中的验证实际是Javascript正则验证的,所以能正常判断。由于平时客户端测试时都正常所以服务器端的验证就很容易被忽略了。

估计很多朋友们的系统都存在这个BUG,刚测试了一下几个网站都存在这样的问题,包括博客园也有这个问题,DUDU要关注一下(只要禁用客户端脚本在注册用户时就能用包含中文的邮箱注册成功,当然不光只是邮箱验证,其它关系到类似正则验证的都可能存在此问题)

代码如下:

ContractedBlock.gif ExpandedBlockStart.gif Code
        //无法判断:中文@domain.com
        public bool IsEmail(string str)
        {
            
if (str == null || str.Trim().Length == 0)
                
return false;
            
return Regex.IsMatch(str.Trim(), @"^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$");
        }
        
//正确的写法
        public bool IsEmail(string str)
        {
            
if (str == null || str.Trim().Length == 0)
                
return false;
            
return Regex.IsMatch(str.Trim(), @"^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$", RegexOptions.ECMAScript);
        }

转载于:https://www.cnblogs.com/Dove/archive/2009/03/28/1424117.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值