VB.NET 使用正则表达式替代多个IF语句实现EMWINHeader验证
用正则表达式替代多IF语句的EMWIN头部验证
你可以通过一个正则表达式一次性验证所有条件,将原函数简化为单行代码:
Imports System.Text.RegularExpressions Private Function ValidateEMWINHeader(ByVal instream As Byte()) As Boolean Return Regex.IsMatch(System.Text.Encoding.ASCII.GetString(instream, 0, 86), "^.{6}/PF.{12}/PN.{6}/PT.{6}/CS.{7}/FD.{32}\r\n$") End Function
正则表达式解释
这个正则精准对应原代码的每一项检查:
^.{6}/PF:跳过前6个字符后,匹配第7-9位的/PF(对应原Mid(headerStr,7,3)).{12}/PN:跳过/PF之后的12个字符,匹配第22-24位的/PN(对应原Mid(headerStr,22,3)).{6}/PT:跳过/PN之后的6个字符,匹配第31-33位的/PT(对应原Mid(headerStr,31,3)).{6}/CS:跳过/PT之后的6个字符,匹配第40-42位的/CS(对应原Mid(headerStr,40,3)).{7}/FD:跳过/CS之后的7个字符,匹配第50-52位的/FD(对应原Mid(headerStr,50,3)).{32}\r\n$:跳过/FD之后的32个字符,匹配最后两位的回车换行(对应原Mid(headerStr,85,2)),同时$确保字符串总长度为86(和原代码取前86字节的逻辑一致)
注意事项
- 确保引用
System.Text.RegularExpressions命名空间,否则需要写全类名System.Text.RegularExpressions.Regex - 原代码的ASCII编码转换逻辑被保留,保证和原有验证逻辑一致
- 正则默认区分大小写,和原代码的字符串比较行为一致
内容的提问来源于stack exchange,提问作者Jim wyman
相关产品推荐
相关产品推荐

