C#Regular Expression来validation日期?

我正在尝试validation输入到文本框中的日期。 文本框上有一个输入掩码,强制输入xx / xx / xxxx。 我正在尝试使用正则表达式validation程序来强制输入正确的日期。 我根本不熟悉RegEx。 我的同事在互联网上找到了这个,但我无法真正说出它在做什么。

这看起来不错吗? 看起来过于复杂……

(^((((0[1-9])|([1-2][0-9])|(3[0-1]))|([1-9]))\x2F(((0[1-9])|(1[0-2]))|([1-9]))\x2F(([0-9]{2})|(((19)|([2]([0]{1})))([0-9]{2}))))$) 

有没有人知道一个不太复杂的表达,基本上做我需要的?

为什么不使用System.DateTime命名空间中可用的方法之一? 您可以使用DateTime.TryParse()edit: DateTime.TryParseExact()可能是正确的建议)来完成validation。

您可以使用DateTime.TryParseExact

 DateTime dt; bool isValid = DateTime.TryParseExact( "08/30/2009", "MM/dd/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dt); 

这将是正确的正则表达式,用于日期格式dd / mm / yyyy

 ^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$ 

上述正则表达式对于dd / mm / yyyy格式是正确的。 表达是

 (^((((0[1-9])|([1-2][0-9])|(3[0-1]))|([1-9]))\x2F(((0[1-9])|(1[0-2]))|([1-9]))\x2F(([0-9]{2})|(((19)|([2]([0]{1})))([0-9]{2}))))$) 

凯腾巴赫有一个问题。 他的同事建议使用正则表达式。 Kettenbach然后有两个问题。

正如其他人所说,在自定义validation器上使用DateTime.TryParseDateTime.TryParseExact并保存自己的正则表达式的恶梦:)

作为替代方案,您可以使用CompareValidator而不是RegularExpressionValidator。 它是这样的:

我们可以使用CustomValidator并使用覆盖ServerValidate方法来检查TryParse!

 ([0][1-9]|[1][0-9|][2][0-9]|[3][0-1])\/([0][1-9]|[1][0-2])\/[1-2][0-9][0-9][0-9] 

为dd / mm / yyyy(年份可以从1000到2999)

要么

(([0] [1-9] | [2] [0-9] | [3] [0-1] | [1-9] | [1] [0-9])/([0] [ 1-9] | [1] [0-2] | [1-9])/([1-2] [0-9] [0-9] [0-9] | [0-9] [0 -9]))

其中包括d / m / yy(例如1/12/82)

这不是一个真正的答案,但你不能使用DateTime.ParseDateTime.TryParse来检查日期是否正确?

要么是这样,要么使用DateTime控件来确保不能输入不是DateTime的数据。 关于这个主题有很多JavaScript。

最后的答案实际上是正确的方法。 使用DateTime.TryParse

例:

 DateTime dt; if(DateTime.TryParse(Textbox1.Text,out dt)) { Label1.Text = "Invalid date format"; }