You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求匹配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-31
  • B:对应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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 01:10:20