我正在尝试验证输入到文本框中的日期。文本框上有一个输入掩码,强制输入xx / xx / xxxx。我正在尝试使用正则表达式验证程序来强制输入正确的日期。我根本不熟悉RegEx。我的同事在互联网上发现了这个,但我无法确定它在做什么。
这看起来不错吗?似乎过于复杂......
(^((((0[1-9])|([1-2][0-9])|(3[0-1]))|([1-9]))\x2F(((0[1-9])|(1[0-2]))|([1-9]))\x2F(([0-9]{2})|(((19)|([2]([0]{1})))([0-9]{2}))))$)
有没有人知道一个不太复杂的表达,基本上可以满足我的需要?
答案 0 :(得分:36)
为什么不使用System.DateTime
namespace中提供的某种方法?您可以使用DateTime.TryParse()
(编辑: DateTime.TryParseExact()
可能是正确的建议)来完成验证。
答案 1 :(得分:24)
您可以使用DateTime.TryParseExact
:
DateTime dt;
bool isValid = DateTime.TryParseExact(
"08/30/2009",
"MM/dd/yyyy",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out dt);
答案 2 :(得分:7)
这是正确的正则表达式,用于日期格式dd / mm / yyyy
^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$
答案 3 :(得分:3)
正如其他人所说的那样,在自定义验证器上使用DateTime.TryParse
或DateTime.TryParseExact
并为自己保留正则表达式的噩梦:)
答案 4 :(得分:3)
上述正则表达式对于dd / mm / yyyy格式是正确的。表达式是
(^((((0[1-9])|([1-2][0-9])|(3[0-1]))|([1-9]))\x2F(((0[1-9])|(1[0-2]))|([1-9]))\x2F(([0-9]{2})|(((19)|([2]([0]{1})))([0-9]{2}))))$)
答案 5 :(得分:3)
作为替代方案,您可以使用CompareValidator而不是RegularExpressionValidator。它是这样的:
<asp:CompareValidator ID="CompareValidator2" runat="server" ControlToValidate="txtIssueDate" ErrorMessage="Invalid Date Format" Type="Date" Operator="DataTypeCheck" Display="Dynamic" Text="*" ForeColor="Red" ValidationGroup="valGroup1"></asp:CompareValidator>
答案 6 :(得分:0)
这不是一个真正的答案,但你不能使用DateTime.Parse
或DateTime.TryParse
检查日期是否正确?
或使用DateTime
控件确保无法输入不是DateTime的数据。关于这个主题有很多JavaScript。
答案 7 :(得分:0)
最后的答案实际上是正确的方法。使用DateTime.TryParse
。
示例:
DateTime dt;
if(DateTime.TryParse(Textbox1.Text,out dt))
{
Label1.Text = "Invalid date format";
}
答案 8 :(得分:0)
我们可以使用CustomValidator并使用覆盖ServerValidate方法来检查TryParse!
答案 9 :(得分:0)
([0][1-9]|[1][0-9|][2][0-9]|[3][0-1])\/([0][1-9]|[1][0-2])\/[1-2][0-9][0-9][0-9]
对于dd / mm / yyyy(年份可以从1000到2999)
或
(([0] [1-9] | [2] [0-9] | [3] [0-1] | [1-9] | [1] [0-9])/([ 0] [1-9] | [1] [0-2] | [1-9])/([1-2] [0-9] [0-9] [0-9] | [0-9 ] [0-9]))
包括d / m / yy(例如1/12/82)