1

我是一名新的 C# 开发人员,我第一次使用正则表达式。在为我的简单项目开发验证类时,我正在使用 Regex 开发一种方法来验证用户输入的日期。日期的格式应仅为 MM/DD/YYYY。我已经开发了该方法,但它给了我不正确的验证,我不知道为什么。

这是 C# 正则表达式方法代码:

public bool ValidateDate(string dateInput)
    {
        Regex datePattern = new Regex("^(1[0-2]|0[1-9])/(3[01]|[12][0-9]|0[1-9])/[0-9]{4}$"); 
        return !datePattern.IsMatch(dateInput);
    }

然后,因为我在 ASP.NET 中有以下文本框:

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

代码隐藏:

protected void Button1_Click(object sender, EventArgs e)
    {
        Validator validator = new Validator();
        if (TextBox1.Text.ToString() != "")
        {
            if (validator.ValidateDate(TextBox1.Text.ToString()))
            {
                lblMessage.Text = "Correct";
            }
            else
            {
                lblMessage.Text = "Incorrect";
            }
        }
        else
        {
            lblMessage.Text = "Please enter a text";
        }
    }

当我尝试对这个文本框使用验证方法时,它给了我不正确的结果。例如,当我输入 2013 年 11 月 10 日时,它给了我不正确的信息。但是,当我进入 2013/11/10 时,它给了我正确的,我不知道为什么

您能帮我修复/修改此验证方法吗?

4

3 回答 3

6

DateTime.TryParseExact为此目的使用专用方法。

public bool ValidateDate(string dateInput)
{
    DateTime dt;
    return DateTime.TryParseExact(dateInput, "MM/dd/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dt);
}
于 2013-11-10T19:52:36.053 回答
2

您不需要为此使用正则表达式。您可以使用该DateTime.ParseExact方法。

所以你的方法是这样的:

public bool ValidateDate(string dateInput)
{
    try 
    {
        DateTime.ParseExact(dateInput, "MM/dd/yyyy", CultureInfo.InvariantCulture);
        return true;
    }
    catch (FormatException) 
    {
        return false;
    }
}
于 2013-11-10T19:50:12.153 回答
0

不确定这是否可行,但尝试在 "^(1[0-2]|0[1-9])/(3[01]|[12][0-9]|0[1 -9])/[0-9]{4}$"。我很确定这使它成为逐字字符串文字,因此您可以避免不转义通常需要转义的字符。

public bool ValidateDate(string dateInput)
{
    Regex datePattern = new Regex(@"^(1[0-2]|0[1-9])/(3[01]|[12][0-9]|0[1-9])/[0-9]{4}$"); 
    return !datePattern.IsMatch(dateInput);
}

更多信息: http: //msdn.microsoft.com/en-us/library/aa691090 (v=vs.71).aspx

于 2013-11-10T20:03:09.410 回答