Регулярное выражение для формата yyyy-MM-dd
У меня есть регулярное выражение в 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 Я сожалею о дублировании вопросов, потому что я действительно этого не заметил, и нашел решения, используя регулярное выражение.
Я бы использовал синтаксический анализ DateTime
вместо regex. И я сильно подозреваю, что вы пытаетесь использовать MM
specifier вместо mm
. Потому что mm
- это минуты, а MM
- месяцы.
Также, основываясь на вашем регулярном выражении, вы пытаетесь проверить свой DateTime
в 20-м или 21-м веке, вы можете проверить его свойство Year
с этими границами века.
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.
}
}