求匹配4字符格式的正则表达式:数字、A-M(排除I)、两位数字
符合要求的正则表达式及VB代码修正
正则表达式方案
1. 仅验证格式匹配(不校验日期合法性)
如果你只需要确保4个字符的格式符合要求(数字、A-M排除I的字母、两位数字),可以使用这个正则:
^[0-9][A-HJ-M]\d{2}$
各部分说明:
^和$:确保匹配的是完整的4个字符,无多余内容[0-9]:匹配第一个0-9的数字字符[A-HJ-M]:匹配A到M之间的字母,排除I(覆盖1-12月的对应字母)\d{2}:匹配连续两位0-9的数字字符(对应日期部分)
这个正则会匹配所有格式正确的字符串,但像3K40这种格式合法但日期无效的内容也会被匹配。
2. 严格验证日期合法性(结合月份判断)
如果需要确保日期部分符合对应月份的天数(比如10月最多31天,4月最多30天),可以使用更精准的正则:
^[0-9](?:[ACEHKM](0[1-9]|[12]\d|3[01])|B(0[1-9]|[12]\d)|[DFJL](0[1-9]|[12]\d|30))$
各分支说明:
[ACEHKM]:对应1、3、5、7、8、10、12月(31天),日期允许01-31B:对应2月,日期允许01-29(简化处理,未区分平闰年)[DFJL]:对应4、6、9、11月(30天),日期允许01-30
这个正则会排除3K40这类日期无效的内容,完全符合你的示例验证要求。
修正后的VB代码
原代码中的正则表达式完全不符合需求,以下是替换后的完整代码:
格式验证版本
Dim validateLot As String = "^[0-9][A-HJ-M]\d{2}$" Dim r As New Regex(validateLot) If r.IsMatch(txtCarton0.Text) Then ' 验证通过时执行的逻辑 Else ' 验证失败时执行的逻辑 End If
严格日期验证版本
Dim validateLot As String = "^[0-9](?:[ACEHKM](0[1-9]|[12]\d|3[01])|B(0[1-9]|[12]\d)|[DFJL](0[1-9]|[12]\d|30))$" Dim r As New Regex(validateLot) If r.IsMatch(txtCarton0.Text) Then ' 验证通过时执行的逻辑 Else ' 验证失败时执行的逻辑 End If
注意:.NET正则不需要在字符串前后添加/分隔符,所以移除了原代码中的多余符号。
内容的提问来源于stack exchange,提问作者ITS ALL ABOUT FAMILY
相关产品推荐
相关产品推荐

