Regex 日期格式比较任务

Regex 日期格式比较任务,regex,Regex,我有个问题。我正在准备日期正则表达式。问题是月份和日期,如果它的一个数字可以表示为03或3表示月份和日期。例如,可能的值: 2015/03/27 or 2015/4/12 or 2015/07/05 or 2015/2/2 or 2015/02/3 到目前为止,我所做的是: ^(?<Month>\d(0([0-1]|1[0-2])|([1-12])){1,2})/(?<Day>\d{1,2})/(?<Year>(?:\d{4}|\d{2}))$ ^(?\d

我有个问题。我正在准备日期正则表达式。问题是月份和日期,如果它的一个数字可以表示为03或3表示月份和日期。例如,可能的值:

2015/03/27 or 2015/4/12 or 2015/07/05 or 2015/2/2 or 2015/02/3
到目前为止,我所做的是:

^(?<Month>\d(0([0-1]|1[0-2])|([1-12])){1,2})/(?<Day>\d{1,2})/(?<Year>(?:\d{4}|\d{2}))$
^(?\d(0([0-1]| 1[0-2])|([1-12]){1,2}/(?:\d{4}}\d{2}))$
我现在开始做一个月:

(?<Month>\d(0([0-1]|1[0-2])|([1-12])){1,2})

(0([0-1]|1[0-2])|([1-12])){1,2})
(?\d(0([0-1]| 1[0-2])|([1-12]){1,2})
(0([0-1]|1[0-2])|([1-12])){1,2})
so{1,2}-因为可以是一位或两位数字,例如(12,2,02)

0([0-1]| 1[0-2])|([1-12])-因为可以是两位数或一位数

不知怎的,我无法把它编入最终版本。
你能帮我个忙吗?

只要使用
\d
,你可能会得到假日期,比如
12/67/4567
。 此外,您的输入还有另一种日期格式:
Year/Month/Day

我建议将此正则表达式用于输入格式:

^(?<Year>(?:19|20)\d{2})\/(?<Month>0?[1-9]|1[0-2])\/(?<Day>3[01]|0?[1-9]|[12][0-9])$

[1-12]
[12]
相同)我不确定您想做什么,或者实际问题是什么,但是
/(0?[1-9]| 1[0-2])/
怎么样?它将匹配
1
12
01
12
。要扩展@biffen注释:
[1-12]
意味着“从
1
1
范围内的任何字符,或者字符
2
”…但无论如何,验证应该留给日期时间库,因此可能更好的正则表达式是
/\d{1,4}/\d{1,2}\/\d{1,2}/
(我注意到示例和正则表达式之间的部分顺序不同。)这仍然会匹配一些无效日期,例如
2015/02/31
。迟早会有人希望通过“适当的”验证来运行它。(而且这个假设排除了除两个世纪以外的所有时间。)@比芬:你说得对,我同意验证必须用
DateTime.TryParse
或其他
DateTime
方法(当然取决于语言)来完成。使用这个正则表达式至少会过滤掉最明显的误报。
var resultFromRegex = "2015/03/27";
DateTime validDate;
var isValid = DateTime.TryParseExact(resultFromRegex, "yyyy/MM/dd", new System.Globalization.CultureInfo("en-US"), System.Globalization.DateTimeStyles.None, out validDate);