我有一个带有日期时间值的查询字符串,输入类似于“?sincemodified=2013-04-02T08:34:12Z”。
如何编写可选的正则表达式格式以接受上述?
我写了以下但失败了:
Regex.Match(@"?sincemodified=2013-04-02T08:34:12Z", @"^[\?sincemodified=\.*]?$").Success
^: 表示开头, * : 任何字符, $ : 表示文本结尾,
因此,您不需要指定 ^..*$ 来表示您想要开头的内容,只需 ^.. 就足够了,所以:
Regex.Match(@"?sincemodified=2013-04-02T08:34:12Z", @"^\?sincemodified=").Success;
会工作
如果你想在因为修改后不为空,这里是一种改进:
Regex.Match(@"?sincemodified=2013-04-02T08:34:12Z", @"^\?sincemodified=(?!\s*$).+").Success;
我不认为,您需要为此使用正则表达式。
就用这个,
Request.QueryString["sincemodified"];
另一种选择是使用HttpUtility.ParseQueryString(),
HttpUtility.ParseQueryString("?sincemodified=2013-04-02T08:34:12Z").Get("sincemodified");
您使用的正则表达式很好,只是您不需要转义“。”
正则表达式可能是
/\?sincemodified=.*/
IMO,REGEX 不是解析日期值的好主意,而是使用DateTime.TryParse
如下:
if(Request.QueryString["sincemodified"] != null)
{
DateTime dt;
if(DateTime.TryParse(Request.QueryString["sincemodified"], out dt)
{
//valid date
}
}