yyyy-MM-dd格式的正则表达式

时间:2015-09-06 09:33:24

标签: c# asp.net regex date

我在asp.net中有一个正则表达式来检查输入数据是否符合格式yyyy-MM-dd。但是,它始终显示"请输入有效的日期"如果输入数据是有效日期。我尝试了一些正则表达式,但那些也没有用。

在aspx文件中

<asp:TextBox ID="DateFrom" runat="server" AutoPostBack="true" OnTextChanged="DateFrom_TextChanged"></asp:TextBox>
<asp:Image ID="Image1" runat="server" ImageUrl="IMAGES/icon-calendar.png" />
<ajaxToolkit:CalendarExtender ID="DateFrom_CalendarExtender" runat="server" Enabled="true" TargetControlID="DateFrom" Format="yyyy-MM-dd" PopupButtonID="Image1" />
<br /><asp:Label ID="DateFromMsg" runat="server" ForeColor="Red" Visible="false"></asp:Label>

在aspx.cs文件中

protected void DateFrom_TextChanged(object sender, EventArgs e)
    {
        string regExp = @"/^((19|20)\d\d+)-(0[1-9]|1[012]+)-(0[1-9]|[12][0-9]|3[01])$/";
        if(!Regex.IsMatch(DateFrom.Text, regExp))
        {
            DateFromMsg.Visible = true;
            DateFromMsg.Text = "Please enter a valid date";
            return;
        }
        BindData();
    }

注意:我的问题与此帖相似:link 我很抱歉重复问题,因为我真的没有注意到它,我找到了使用正则表达式的解决方案。

1 个答案:

答案 0 :(得分:2)

我会使用DateTime解析而不是正则表达式。并且强烈怀疑您尝试使用MM说明符而不是mm。因为mm是几分钟而MM是几个月。

同样基于你的正则表达式,你试着检查你在20世纪或21世纪的DateTime,你可以用这些世纪的边界检查Year property

DateTime dt;
if(DateTime.TryParseExact(DateFrom.Text, "yyyy-MM-dd", CultureInfo.InvariantCulture,
                          DateTimeStyles.None, out dt))
{
    if(dt.Year >= 1900 && dt.Year <= 2099)
    {
        // Your text is valid.
    }
}