【问题标题】:Regular Expression for yyyy-MM-dd format [duplicate]yyyy-MM-dd 格式的正则表达式 [重复]
【发布时间】:2015-09-06 09:33:24
【问题描述】:

我在 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 我很抱歉重复问题,因为我真的没有注意到它,我找到了使用正则表达式的解决方案。

【问题讨论】:

    标签: c# asp.net regex date


    【解决方案1】:

    我会使用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.
        }
    }
    

    【讨论】:

    • 谢谢。不错的答案!!!它真的对我有用。
    猜你喜欢
    • 1970-01-01
    • 2017-07-10
    • 2020-04-09
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-25
    • 1970-01-01
    相关资源
    最近更新 更多