asp.NET开发中正则表达式中BUG分析

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

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

复制代码 代码如下:

Regex regex = new Regex(@"[/u00FF-/uFFFF]+");
  // 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 not expected to be matched: 0x{0:X}!", i));
  }
  // However, the characters whoes value
  // are greater than 0xfe are expected to be matched.
  for (int i = 0xff; i <= 0xffff; 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(@"[/u00FF-/uFFFF]+", RegexOptions.IgnoreCase);
程序运行的时候就会有两处断言错误。它们分别是字符值为 73 和 105,也就是小写字母 i 和大写字母 I。 这个 bug 非常奇怪,别的字符都很正常!而且用 javascript脚本在 IE (版本是6.0)里面运行也同样有这么 bug 存在(比如下面这段代码)。然而在 Firefox中运行就是没有问题的。还是 Firefox 好啊,呵呵!
以下为引用的内容:
复制代码 代码如下:

var re = /[/u00FF-/uFFFF]+/;
  // var re = /[/u00FF-/uFFFF]+/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 + '!' );
  }
  }

相关文章

  • .NET Core利用BsonDocumentProjectionDefinition和Lookup进行 join 关联查询(推荐)

    .NET Core利用BsonDocumentProjectionDefinition和Lookup进行 join 

    这篇文章主要介绍了.NET Core利用BsonDocumentProjectionDefinition和Lookup进行join关联查询,这里主要介绍一下查询角色的所有用户的例子,文章结合实例代码给大家详细讲解,需要的朋友可以参考下
    2022-10-10
  • ASP.NET Core中的策略授权和ABP授权

    ASP.NET Core中的策略授权和ABP授权

    这篇文章介绍了ASP.NET Core中的策略授权和ABP授权,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • .NET中的DES对称加密详解

    .NET中的DES对称加密详解

    DES是一种对称加密(Data Encryption Standard)算法,于1977年得到的正式许可,是一种用56位密钥来加密64位数据的方法,一般密码长度为8个字节,其中56位加密密钥,每个第8位都用作奇偶校验
    2013-10-10
  • Asp.Net服务器发送HTTP标头后无法设置内容类型的问题解决

    Asp.Net服务器发送HTTP标头后无法设置内容类型的问题解决

    这篇文章主要给大家介绍了Asp.Net服务器发送HTTP标头后无法设置内容类型问题的解决方法,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-05-05
  • 轻量级ORM框架Dapper应用之实现DTO

    轻量级ORM框架Dapper应用之实现DTO

    本文详细讲解了使用Dapper实现DTO的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • ASP.NET开源导入导出库Magicodes.IE完成Csv导入导出的方法

    ASP.NET开源导入导出库Magicodes.IE完成Csv导入导出的方法

    这篇文章主要介绍了ASP.NET开源导入导出库Magicodes.IE完成Csv导入导出的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • ASP.NET中使用IFRAME建立类Modal窗口

    ASP.NET中使用IFRAME建立类Modal窗口

    ASP.NET中使用IFRAME建立类Modal窗口...
    2006-09-09
  • .net设计模式之装饰模式(Decorator)

    .net设计模式之装饰模式(Decorator)

    这篇文章主要为大家详细介绍了.net设计模式之装饰模式Decorator,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • ASP.NET AJAX 4.0的模版编程(Template Programming)介绍

    ASP.NET AJAX 4.0的模版编程(Template Programming)介绍

    不过当我评估ASP.NET AJAX 4.0的时候,我确实被它的特征给震住了。新的特征完全专注于浏览器技术,比如XHTML和javascript。 我非常钦佩ASP.NET AJAX小组。
    2009-07-07
  • 一个简单的asp.net 单点登录实现

    一个简单的asp.net 单点登录实现

    上次做了学校的火车订票系统,那边要求要从学生信息平台直接点过来就是登录状态,不用在重新登录。学生信息平台原来是用asp做的,而火车订票系统是asp.net做的。两个网站的学生信息调用的是同一个数据库。
    2009-11-11

最新评论