【发布时间】:2015-04-23 14:35:14
【问题描述】:
我在使用 VB.NET IsDate 函数时遇到了问题 - 它在不是有效日期的字符串值上返回 true,例如“367 7”和“10,600”等。所以我决定编写自己的函数并想要听取有关可能改进的一些反馈。非常感谢您提供宝贵的意见。
Function IsValidDate(ByVal str As String) As Boolean
str = str.Replace(" ", "").Trim()
'If (str Is Nothing) Then
' Return False
'End If
'If IsNumeric(str) Then
' Return False
'End If
'If Regex.IsMatch(str, "^[A-Za-z ]+$") Then
' Return False
'End If
If Regex.IsMatch(str, "^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d$") Then
''mm/dd/yyyy or mm-dd-yyyy
Return True
ElseIf Regex.IsMatch(str, "^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.]\d\d$") Then
''mm/dd/yy or mm-dd-yy
Return True
ElseIf Regex.IsMatch(str, "^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$") Then
''dd-mm-yyyy or dd/mm/yyyy
Return True
ElseIf Regex.IsMatch(str, "^(19|20)\d\d[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])$") Then
''yyyy-mm-dd or yyyy/mm/dd
Return True
End If
Return False
End Function
我处理了数字字符串中可能存在的空格(例如:“367 7”,然后我确保如果该值是数字或什么都没有,它会返回 false。我还删除了所有字母数字的字符串。请让我知道你怎么想。谢谢
P.S> 编辑:我在开头注释掉了几行,因为我觉得它们可以被删除,因为如果字符串与其中一个正则表达式不匹配,它无论如何都会返回 false
【问题讨论】:
-
您不允许某些人可能认为有效的一些格式。如果您是唯一的用户,这不是问题,但是如果其他人可以使用该功能,则需要考虑一些问题。您不允许使用“”作为分隔符的格式(例如 12 31 2014),并且您不允许拼写月份(完整或缩写 - 例如 Apr 或 April)。
-
这不是问题...
标签: vb.net validation datetime