<asp:TextBox ID="txtDob" runat="server" MaxLength="100" CssClass="textbox2" size="10" />
<ajax:TextBoxWatermarkExtender ID="txtWEDOB" WatermarkText="DD/MON/YYYY" TargetControlID="txtDob" runat="server" />
<asp:RegularExpressionValidator ID="rfv" runat="server" ControlToValidate="txtDob" SetFocusOnError="true"
ValidationExpression="^(3[0-1]|2[0-9]|1[0-9]|0[1-9])[\s{1}|\/|-](Jan|JAN|Feb|FEB|Mar|MAR|Apr|APR|May|MAY|Jun|JUN|Jul|JUL|Aug|AUG|Sep|SEP|Oct|OCT|Nov|NOV|Dec|DEC)[\s{1}|\/|-]\d{4}$"
Display="None" ValidationGroup="search" ErrorMessage="Please enter correct date">
</asp:RegularExpressionValidator>
我正在使用这个正则表达式验证器来表示日期。它不会像12-FEB-2010或2010年2月12日那样给出错误。我严格要求12 / FEB / 2010格式。此定期expressii \ on不适用于29 / FEB / 2010之类的日期。需要做出哪些改变。
答案 0 :(得分:0)
如果要验证所有可能的情况(例如30 / FEB),那么正则表达式将非常复杂。
你需要30个月的子表达式,你需要一个月表达31天的子表达式,最有趣的是2月和闰年。我认为使用正则表达式不是一个好主意。
[编辑]
评论中的问题:
^((31(?! (FEB|APR|JUN|SEP|NOV)))|((30|29)(?! FEB))|(29(?= FEB (((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)))))|(0?[1-9])|1\d|2[0-8])/(JAN|FEB|MAR|MAY|APR|JUL|JUN|AUG|OCT|SEP|NOV|DEC)/((1[6-9]|[2-9]\d)\d{2})$
答案 1 :(得分:0)
我假设你已经从其他地方剪切并粘贴了这个正则表达式?
此部分([\s{1}|\/|-]
)是您的问题所在。这允许空格(\ s)和连字符( - ),以及/字符。
它应该是\/
。所以你现在的正则表达式
"^(3[0-1]|2[0-9]|1[0-9]|0[1-9])[\s{1}|\/|-](Jan|JAN|Feb|FEB|Mar|MAR|Apr|APR|May|MAY|Jun|JUN|Jul|JUL|Aug|AUG|Sep|SEP|Oct|OCT|Nov|NOV|Dec|DEC)[\s{1}|\/|-]\d{4}$
变为
"^(3[0-1]|2[0-9]|1[0-9]|0[1-9])\/(Jan|JAN|Feb|FEB|Mar|MAR|Apr|APR|May|MAY|Jun|JUN|Jul|JUL|Aug|AUG|Sep|SEP|Oct|OCT|Nov|NOV|Dec|DEC)\/\d{4}$
编辑:我已经解决了这个答案中“新”正则表达式中的拼写错误((
)。
请注意,不会解决有关不同月份(例如2月30日)天数的任何问题。但是我没有发现它与汉斯在评论中提出的“311apr} 2011”相匹配 - 还有任何进一步的评论吗?
这正确地解决了您的问题。我同意下面的评论,正则表达式是一个可靠的日期验证工具,但我提供的答案,而不是试图给你一般的建议。