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