C#Regular Expression来验证日期?

时间:2009-08-31 20:11:43

标签: c# regex validation date

我正在尝试验证输入到文本框中的日期。文本框上有一个输入掩码,强制输入xx / xx / xxxx。我正在尝试使用正则表达式验证程序来强制输入正确的日期。我根本不熟悉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}))))$)

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

10 个答案:

答案 0 :(得分:36)

为什么不使用System.DateTime namespace中提供的某种方法?您可以使用DateTime.TryParse()编辑: DateTime.TryParseExact()可能是正确的建议)来完成验证。

答案 1 :(得分:24)

您可以使用DateTime.TryParseExact

DateTime dt;

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

答案 2 :(得分:7)

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

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

答案 3 :(得分:3)

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

正如其他人所说的那样,在自定义验证器上使用DateTime.TryParseDateTime.TryParseExact并为自己保留正则表达式的噩梦:)

答案 4 :(得分:3)

上述正则表达式对于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}))))$)

答案 5 :(得分:3)

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

<asp:CompareValidator ID="CompareValidator2" runat="server" ControlToValidate="txtIssueDate" ErrorMessage="Invalid Date Format" Type="Date" Operator="DataTypeCheck" Display="Dynamic" Text="*" ForeColor="Red" ValidationGroup="valGroup1"></asp:CompareValidator>

答案 6 :(得分:0)

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

或使用DateTime控件确保无法输入不是DateTime的数据。关于这个主题有很多JavaScript。

答案 7 :(得分:0)

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

示例:

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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

([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)