修改“dd / MM / yyyy”的正则表达式

时间:2014-01-31 18:31:58

标签: c# asp.net regex expression

我有“dd / MM / yyyy”的正则表达式,工作正常,

"^([0]?[1-9]|[1][0-2])[./-]([0]?[1-9]|[1|2][0-9]|[3][0|1])[./-]([0-9]{4}|[0-9]{2})$"

但我想修改它,所以它也接受00 / MM / 2014。 我的程序将此解释为特定月份的所有日期。例如00/04/2014 指4月份的所有日期。

有人可以告诉我,为了实现这一目标,我需要对上述脚本做出哪些改变?

以下是我在其中使用的代码:

<asp:TextBox ID="TextBox5" runat="server" MaxLength="1"  CssClass="MainContent"
                         style="text-align:justify" ValidationGroup="MKE" Width="130px" />
                     <asp:ImageButton ID="ImgBntCalc" runat="server" CausesValidation="False" 
                         ImageUrl="images\calendar-schedulehs.png" />
                                    <asp:MaskedEditExtender ID="MaskedEditExtender2" runat="server" 
                                        AcceptNegative="Left" DisplayMoney="Left" ErrorTooltipEnabled="True" 
                                        mask="99/99/9999" MaskType="Date" MessageValidatorTip="true" 
                                        OnFocusCssClass="MaskedEditFocus" OnInvalidCssClass="MaskedEditError" 
                                        TargetControlID="TextBox5"  />
                                         <asp:MaskedEditValidator ID="MaskedEditValidator2" runat="server" 
                                        ControlExtender="MaskedEditExtender2" ControlToValidate="TextBox5" 
                                        Display="Dynamic" EmptyValueBlurredText="*"  ValidationExpression="^(?:[012]?[0-9]|3[01])[./-](?:0?[1-9]|1[0-2])[./-](?:[0-9]{2}){1,2}$"
                                        InvalidValueMessage="Date is invalid" ValidationGroup="MKE1" />
                                    <asp:CalendarExtender ID="CalendarExtender1" runat="server"  Format="dd/MM/yyyy"
                                        PopupButtonID="ImgBntCalc" TargetControlID="TextBox5" /> 

5 个答案:

答案 0 :(得分:3)

现在它是为MM/dd/yyyy构建的(第一组只能包含0-12)。但是这里适用于dd/mm/yyyy并允许000天:

"^([0]?[0-9]|[12][0-9]|[3][01])[./-]([0]?[1-9]|[1][0-2])[./-]([0-9]{4}|[0-9]{2})$"

答案 1 :(得分:0)

您可能还想查看DateTime.ParseExact(格式描述为here),在大多数情况下,它是解析日期的更简单方法...

答案 2 :(得分:0)

我认为在这个表达中有太多的事情发生了。主观,可以肯定,但如果这是我的代码,我会做一个更宽松的正则表达式并在代码中进行验证。我发现六个月后回来更容易理解,而不是一个复杂的正则表达式。

有人说......

^(00|0?[1-9]|[12][0-9]|3[01])[./-]([0]?[1-9]|[12][0-9]|[3][01])[./-]([0-9]{4}|[0-9]{2})$

修改

作为解释,这是表达式的日期部分,注释:

^(
  00          # match the literal string '00'
  | 0?[1-9]   # or, match 1-9, optionally prefixed with '0'
  | [12][0-9] # or, match days 10-29
  | 3[01]     # or, match days 30 and 31
 )

根据您的评论判断,听起来您在代码中实际使用正则表达式的方式存在问题。你可以在实际使用表达式的地方发布代码吗?

答案 3 :(得分:0)

怎么样:

日/月/年:

^(?:[012]?[0-9]|3[01])[./-](?:0?[1-9]|1[0-2])[./-](?:[0-9]{2}){1,2}$

毫米/日/年:

^(?:0?[1-9]|1[0-2])[./-](?:[012]?[0-9]|3[01])[./-](?:[0-9]{2}){1,2}$

答案 4 :(得分:0)

尝试这种模式

^([0]?[0-9]|[1][0-2])[.\/-]([0]?[1-9]|[1|2][0-9]|[3][0|1])[.\/-]([0-9]{4}|[0-9]{2})$

在ASPX中

  <asp:TextBox ID="TextBox5" runat="server" MaxLength="1"  CssClass="MainContent"
                             style="text-align:justify" ValidationGroup="MKE" Width="130px" />
                         <asp:ImageButton ID="ImgBntCalc" runat="server" CausesValidation="False" 
                             ImageUrl="images\calendar-schedulehs.png" />
                                        <asp:MaskedEditExtender ID="MaskedEditExtender2" runat="server" 
                                            AcceptNegative="Left" DisplayMoney="Left" ErrorTooltipEnabled="True" 
                                            mask="99/99/9999" MaskType="Date" MessageValidatorTip="true" 
                                            OnFocusCssClass="MaskedEditFocus" OnInvalidCssClass="MaskedEditError" 
                                            TargetControlID="TextBox5"  />
                                             <asp:MaskedEditValidator ID="MaskedEditValidator2" runat="server" 
                                            ControlExtender="MaskedEditExtender2" ControlToValidate="TextBox5" 
                                            Display="Dynamic" EmptyValueBlurredText="*"  ValidationExpression="^([0]?[0-9]|[1][0-2])[.\/-]([0]?[1-9]|[1|2][0-9]|[3][0|1])[.\/-]([0-9]{4}|[0-9]{2})$"
                                            InvalidValueMessage="Date is invalid" ValidationGroup="MKE1" />
                                        <asp:CalendarExtender ID="CalendarExtender1" runat="server"  Format="dd/MM/yyyy"
                                            PopupButtonID="ImgBntCalc" 

    TargetControlID="TextBox5" /> 

检查此处DATE VALIDATION