如何验证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)?)$
在这里测试这个正则表达式。