url中的DateTimeOffset验证的正则表达式?



如何验证url中的日期和时间是正确的DateTimeOffset格式?

DateTimeOffset格式(基本上以4位年份开始,以大写Z结束):

  • yyyy-mm-ddZ
  • yyyy-mm-ddTZ hh: mm: ss
  • yyyy-mm-ddTZ hh: mm: ss.fffff

url中的Valid DateTimeOffset:

  • aaa.com/activityDateTime eq2022-05-12Z
  • aaa.com/activityDateTime eq2022-05-12T12:00:00Z
  • aaa.com/activityDateTime%20eq%202022 - 05 - 12 t12:00:00z
  • aaa.com/activityDateTime + eq +2022 - 05 - 12 t12:00:00.123456z
  • aaa.com/activityDateTime gt2022-03-12Zle2022 - 05 - 12 - z

注:eq表示相等,gt表示大于,le表示小于

url中的DateTimeOffset无效:

  • aaa.com/activityDateTime eq2022-05-12
  • aaa.com/activityDateTime eq2022-05-12T12:00:00
  • aaa.com/activityDateTime%20eq%202022 - 05 - 12 t12:00:00
  • aaa.com/activityDateTime + eq +2022 - 05 - 12 t12:00:00.123456

我目前将url转换为字符串并使用Regex验证它,但不确定处理url包含"%20"的情况的正确方法是什么。有没有办法不使用Replace()?此外,有没有其他建议来验证url中的DateTimeOffset ?下面是我当前的正则表达式:

Regex checkDate = new Regex(@"^(?!d{4}-d{2}-d{2}Z)");
Regex checkDateTime = new Regex(@"^(?!d{4}-d{2}-d{2}Td{2}:d{2}:d{2}Z)");

如果您需要一个正则表达式来验证DateTimeOffset,您可以使用下面的:

^[A-Za-z./]+( |%20|+)(eq|gt)( |%20|+)[d-]+(T[d:]+(.[d]+)?Z|Z( [a-z]+ [d-]+Z)?)$

解释:

  • ^: start string
  • [A-Za-z./]+:字母字符、点和斜线的任意组合
  • ( |%20|+):单空格或%20或+
  • (eq|gt): eq or gt
  • ( |%20|+):单空格或%20或+
  • [d-]+:数字和破折号的任意组合(日期)

最后一部分(T[d:]+(.[d]+)?Z|Z( [a-z]+ [d-]+Z)?)可以在两个不同的后缀之间匹配一个。

后缀1T[d:]+(.[d]+)?Z:

  • T: T
  • [d:]+:任意数字与:(时间)的组合
  • (.[d]+)?:可选的单点与数字组合的存在(毫秒?)
  • Z: z

后缀2Z( [a-z]+ [d-]+Z)?:

  • Z: Z
  • ( [a-z]+ [d-]+Z)?:可选的空格,后面跟着字母,空格,数字和破折号的组合(日期),Z

整个正则表达式用:

  • $: end of string

如果您只想匹配DateTimeOffset,则只使用该正则表达式的以下部分:

[d-]+(T[d:]+(.[d]+)?Z|Z( [a-z]+ [d-]+Z)?)$

在这里测试这个正则表达式。

最新更新