tempad
ReadyGo!技术成就梦想 >>.Net >> 故障解析:.NET开发正则表达式中BUG一例

故障解析:.NET开发正则表达式中BUG一例

ReadyGo!技术成就梦想 网络搜索 efish 2008-6-14 17:26:13

又发现了一个 .net 的bug!最近在使用正则表达式的时候发现:在忽略大小写的时候,匹配值从 0xff 到 0xffff 之间的所有字符,正则表达式竟然也能匹配两个 ASCII 字符:i(code: 0x69) 和 I(code: 0x49);但是仍然不能匹配其他的 ASCII 字母和数字。

比如以下的代码就是用来测试用正则表达式匹配从 0xff 到 0xffff 的字符。而值范围在 0 到 0xfe 的所有字符是不能被匹配的。

  1234567891011121314151617Regex regex = new Regex(@"+");   // The characters, whoes value are smaller than 0xff, are not expected to be matched.   for (int i = 0; i < 0xff; i++) {   string s = new string(new char { (char)i });   Debug.Assert(   regex.IsMatch(s),   string.Format("The character was expected to be matched: 0x{0:X}!", i));   }

这时的运行结果是正常的,没有任何的断言错误出现。

然而当使用忽略大小写的匹配模式时,结果就不一样了。将上面代码中的第一行改成:

1Regex regex = new Regex(@"+", RegexOptions.IgnoreCase);

程序运行的时候就会有两处断言错误。它们分别是字符值为 73 和 105,也就是小写字母 i 和大写字母 I。 这个 bug 非常奇怪,别的字符都很正常!而且用 javascript 脚本在 IE (版本是6.0)里面运行也同样有这么 bug 存在(比如下面这段代码)。然而在 Firefox 中运行就是没有问题的。还是 Firefox 好啊,呵呵!

1234567891011121314151617var re = /+/;   // var re = /+/i;   for(var i=0; i<0xff; i++) {   var s = String.fromCharCode( i );   if ( re.test(s) ){   alert( "Should not be matched: " + i + "!" );   }   }   for(var i=0xff; i<=0xffff; i++) {   var s = String.fromCharCode( i );   if ( !re.test(s) ){   alert( "Should be matched: " + i + "!" );   }   }

(责任编辑:云子)

责任编辑: efish 参与评论 查找更多:
相关文章
ASP.NET实现页面间值传递的几种方法介绍 (1) ASP.NET实现页面间值传递的几种方法介绍 (1)
关于VS 2008和.NET 3.5 Beta2新特性介绍 关于VS 2008和.NET 3.5 Beta2新特性介绍
实用技巧:.Net框架类库中定时器类的使用 (1) 实用技巧:.Net框架类库中定时器类的使用 (1)
C#编程实用技巧:轻松实现对文件的操作 C#编程实用技巧:轻松实现对文件的操作
.Net开发漫谈:关于命名空间和目录划分 .Net开发漫谈:关于命名空间和目录划分
.Net(C#)开发漫谈:关于变量的命名和属性 .Net(C#)开发漫谈:关于变量的命名和属性
Windows CE.Net下矩阵键盘开发设计详解 (1) Windows CE.Net下矩阵键盘开发设计详解 (1)
使用 Exchange 2000 Collaboration Data Objects:性… 使用 Exchange 2000 Collaboration Data Objects:性能优化
如何编写用于 SharePoint Portal Server 2003 的备份… 如何编写用于 SharePoint Portal Server 2003 的备份和恢复应用程序
将仪表板 Web 部件转换为 Microsoft SharePoint 产品… 将仪表板 Web 部件转换为 Microsoft SharePoint 产品和技术的 Web
2秒记住本站域名

玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的ReadyGo.com.cn

分类导航
ReadyGo!技术成就梦想