Vb.net 如何检查输入的日期格式是否正确?

Vb.net 如何检查输入的日期格式是否正确?,vb.net,winforms,Vb.net,Winforms,我有一个文本框,用户应该在其中输入日期。如何检查输入的日期格式是否正确 像这样:02/02/2008 不是这样的022/22/-1 不是这样的2009/02/02 不是这样的2015年6月2日 不是这样的02/abc/2010 (我不想使用DateTimePicker或MonthCalender) 编辑1 我是这样试的 Private Sub txtHireDate_Validated(ByVal sender As Object, ByVal e As System.EventArgs)

我有一个文本框,用户应该在其中输入日期。如何检查输入的日期格式是否正确

像这样:
02/02/2008

  • 不是这样的
    022/22/-1
  • 不是这样的
    2009/02/02
  • 不是这样的
    2015年6月2日
  • 不是这样的
    02/abc/2010
(我不想使用DateTimePicker或MonthCalender)

编辑1

我是这样试的

Private Sub txtHireDate_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtHireDate.Validated
    Dim dateString As String = txtHireDate.Text
    Dim formats As String = "MM/dd/yyyy"
    Dim dateValue As DateTime

    If DateTime.TryParseExact(dateString, formats, New CultureInfo("en-US"), DateTimeStyles.None, dateValue) Then

    End If
但它显示出一些错误

使用功能:

String dateString = dateTextBox.Text;
String formats = "MM/dd/yyyy";
DateTime dateValue;

if (DateTime.TryParseExact(dateString, formats, 
                              new CultureInfo("en-US"), 
                              DateTimeStyles.None, 
                              out dateValue))
{
    // That means the value of the date is in the specified format..
}
不要忘记使用
全球化
命名空间

using System.Globalization;

我在文本框下的
FormatValidator
控件中使用以下regexp:

^(19|20)\d\d[- /.]?(0[1-9]|1[012])[- /.]?(0[1-9]|[12][0-9]|3[01])$
这是年-月-日格式,并允许以下格式:

  • 年月日
  • yyyyMMdd
  • yyyy/MM/dd
  • yyyy.MM.dd
请注意,在使用标准北美日期时,年-月-日格式不能混淆。美国格式(MM/dd/yyyy)的解析方式与加拿大格式(dd/MM/yyyy)的解析方式不同,但在到达高于12天的日期之前,您不会知道它是错误的

向页面添加验证程序的示例:

<asp:RegularExpressionValidator ID="txtTreatmentDate_FormatValidator" runat="server" 
    Display="Dynamic" ValidationGroup="LogSave"
    ControlToValidate="txtTreatmentDate" ValidationExpression="ThisIsIgnored"
    ErrorMessage="*Invalid Date" />
在DateHandler中(如果需要,也可以使用时间格式):

因为你没有指定你想要的格式(我假设是我们),所以我没有修改它来为你工作,但这只是移动块和更改允许的分隔符的简单问题

加拿大格式:

"^(0[1-9]|[12][0-9]|3[01])[/](0[1-9]|1[012])[/](19|20)\\d\\d$";

解析日期时,您肯定希望使用ParseExact with EN-CA(我认为这是缩写形式)区域性,或者指定日期要遵循的格式字符串(即“dd/MM/yyyy”)

注意,即使您使用控件填充文本框,验证它仍然是一个好主意。这对于
新文化信息(“EN-US”)来说是什么
如果要为
datetime
值指定区域性,请使用它。。你可以忽略它,改为使用
NULL
。你需要使用en-CA,而不是en-US。另外,我刚刚从我的答案中提取了转义。我将这个regexp存储在一个实用程序类中,而不是将其复制到每个验证控件中,而是在页面加载时将其添加到验证器中。我没有使用regexp的经验,您能告诉我如何使用您的代码吗?在提交页面的按钮中,您必须添加
ValidationGroup=“LogSave”
或任何您想要使用的验证组。在本例中,这是一个医疗日志。请注意,问题是关于Winforms,而不是Web表单。所以这个答案在这里并不适用。当不绑定到
FormatValidator
时,使用
DateTime.TryParse(精确)
肯定是比自制正则表达式更好的解决方案。@Kendrick:在基于windows的应用程序上工作没有失败吗??
public static readonly String DateFormatStandardRegex = "^(19|20)\\d\\d[- /.]?(0[1-9]|1[012])[- /.]?(0[1-9]|[12][0-9]|3[01])$";
public static readonly String TimeFormat24HourRegexp = "(20|21|22|23|[01]\\d):?([0-5]\\d):?([0-5]\\d(\\.\\d*)?)?";
"^(0[1-9]|[12][0-9]|3[01])[/](0[1-9]|1[012])[/](19|20)\\d\\d$";