用于验证日期格式掩码的正则表达式

标签 regex vba excel

我正在编写一个正则表达式来验证用户输入的日期格式,例如“DD/MM/YYYY”(不是日期验证)

我是正则表达式的新手,但到目前为止我有以下内容:

(D{2}|M{2}|Y{2,4})[-|/]?(D{2}|M{2})[-|/]?(D{2}|M{2}|Y{2,4})

这与以下日期格式匹配:

  • 日/月/年
  • 月/日/年
  • 日-月-年
  • 月-日-年
  • DDMMYYYY
  • MMDDYYYY
  • YYYYMMDD
  • YYYYDDMM
  • 年/月/日
  • 年/日/月
  • 年-月-日
  • 年-日-月
  • 日/月/年
  • 月/日/年
  • 日-月-年
  • 月-日-年
  • DDMMYY
  • MMDDYY
  • 年月日
  • YYDDMM
  • 年/月/日
  • 年/日/月
  • 年-月-日
  • 年-日-月

但不幸的是,也匹配以下内容:

  • DDMMDD
  • YYMMYYYY
  • MMMMMM

有没有办法只匹配第一个列表中指定的格式? RegEx 将用于 VBA 表单验证。

最佳答案

您可以使用负反向引用来确保您不会重复任何先前的条目:

^(D{2}|M{2}|(YY){1,2})[-|\/]?(?!\1)(D{2}|M{2})[-|\/]?((?!\1|\3)(D{2}|M{2}|(YY){1,2}))$

负反向引用 (?!\1) 和 (?!\1|\3) 可防止条目重复。

此外,Y{2,4} 与“YYY”匹配,因此我将其更改为 (YY){1,2}。

关于用于验证日期格式掩码的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17945374/

相关文章:

java io - 正则表达式不起作用 - 为什么

excel - 使用 XMLHTTP 而不是试用 Internet Explorer

vba - 根据ID或标题获取特定内容控制的索引

excel - CSV:如何包含双字节字符

c# - 正则表达式:找到整数但不是 float

javascript - 正则表达式匹配 : Surrounded by space or start of line, 但不匹配

regex - 为什么当正则表达式与 * 对组匹配时 Perl 很懒惰?

VBA 数组变体 - 下标超出范围

excel - 互操作 Excel 方法 LinEst 因 DISP_E_TYPEMISMATCH 失败

excel - xlsxwriter 将括号添加到公式中