如何检查或验证文本框输入的日期DD/MM/YYYY
格式是否正确?
8 回答
标记:
<asp:Textbox runat="server" ID="TextBox1" />
<asp:CustomValidator runat="server" ControlToValidate="TextBox1" ErrorMessage="Date was in incorrect format" OnServerValidate="CustomValidator1_ServerValidate" />
代码隐藏:
protected void CustomValidator1_ServerValidate(object sender, ServerValidateEventArgs e)
{
DateTime d;
e.IsValid = DateTime.TryParseExact(e.Value, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out d);
}
如果您想允许多种格式并且只允许它们,请使用下一个:
DateTime.TryParseExact(e.Value, new[] { "dd/MM/yyyy", "yyyy-MM-dd" }, CultureInfo.InvarinatCulture, DateTimeStyles.None, out d);
另一种选择是使用正则表达式验证器。下面的正则表达式检查 DD/MM/YYYY 但是当然没有办法区分像 01 这样的东西是 DD 还是 MM。否则它会成功。
<asp:TextBox ID="txtDate" runat="server"/>
<asp:RegularExpressionValidator ID="regexpName" runat="server"
ErrorMessage="This expression does not validate."
ControlToValidate="txtDate"
ValidationExpression="^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$" />
DateTime Result;
DateTimeFormatInfo info = new DateTimeFormatInfo ( );
CultureInfo culture;
culture = CultureInfo.CreateSpecificCulture ( "en-US" );
info.ShortDatePattern = "dd/MM/yyyy";
if ( DateTime.TryParse ( StrDate, info, DateTimeStyles.None, out Result ) )
{
return StrDate;
}
我的方法是使用 regexvalidator 进行第一次快速测试(“它看起来像是一个日期吗”)客户端。然后是一个带有服务器端事件的 CustomValidator,它尝试使用我的格式执行 DateTime.Parse,以排除像“2010 年 2 月 29 日”这样的日期。
我个人不信任这里的 CompareValidator,因为我不确定它使用什么格式(但这可能是因为我没有进行足够的调查)。
您可以使用CustomValidator检查输入的值是否在设置的参数内。
即 13/12/2001 有效,但 12/13/2001 无效。
您可以使用自定义验证器检查文本框中的任何内容,但使用CompareValidator检查文本是否可以转换为日期可能更容易。
我在这里找到了一个示例(在 VB 中,但很容易阅读并翻译成 C#):http: //quickstarts.asp.net/QuickStartv20/aspnet/doc/validation/default.aspx
但是,使用某种日期选择器控件可能对用户更友好。
最好使用日历控件,但如果您想检查日期字符串,请使用以下代码来验证日期是否为 DD/MM/YYYY 格式。
DateTime dt;
if (!DateTime.TryParse(texbox.Text, new System.Globalization.CultureInfo("en-GB"), System.Globalization.DateTimeStyles.None, dt))
{
// text is not in the correct format
}
You can't. User some kind of datetime picker instead. Example here.