.NET桌面应用与ASP.NET中StartsWith方法行为不一致问题排查
问题:.NET桌面与ASP.NET应用中StartsWith行为不一致
我在.NET桌面应用和Visual Studio运行的ASP.NET Web应用中遇到了行为不一致的问题,两者使用完全相同的正则表达式和判断逻辑,但结果却不同。
重现代码
正则匹配代码:
Dim mStart As Match = Regex.Match(s, "^((<|⏸)(?<tag>\w+)\(|⸨)")
后续判断逻辑:
If mStart.Groups("tag").Success Then If mStart.Value.StartsWith("⏸") Then ' ASP.NET中当mStart.Value = "<mn"时意外返回true End If End If
问题现象
- 桌面应用:当
mStart.Value为<mn时,StartsWith("⏸")正确返回false,因为首字符是ASCII 60(<) - ASP.NET应用:
mStart.Value同样为<mn(长度3),且AscW(mStart.Value(0)) = 60,但StartsWith("⏸")意外返回true
补充细节
此前调用同一方法时,输入字符串s以⏸mn开头,条件能正确触发;但后续调用中,当s = "<mn"时,即使首字符明确是<,StartsWith("⏸")仍返回true。
已验证内容
我已经逐一确认以下信息:
mStart.Value = "<mn"mStart.Value.Length = 3AscW(mStart.Value(0)) = 60- 字符串无不可见字符或前导BOM,逐字符循环确认首字符确实是
<
假设方向
我目前考虑的可能原因:
- Unicode归一化差异
- Regex.Match中的字符串缓存或复用机制问题
- HTML/XML解码过程中引入隐藏字符
- .NET桌面端与ASP.NET对
Regex.Match().Value的处理存在平台特定差异
是否有人遇到过类似问题?这是否是.NET的bug、缓存问题或是平台特定行为?期待相关见解。
内容的提问来源于stack exchange,提问作者Xavier Junqué
相关产品推荐
相关产品推荐

