【问题标题】:validation for Time HH:MM am or pm Format using regular expression使用正则表达式验证时间 HH:MM am 或 pm 格式
【发布时间】:2012-09-18 20:49:12
【问题描述】:

我正在使用带有 vb 代码的 asp.net 开发 Web 应用程序。

我有一个时间字段的文本框,我正在使用正则表达式验证器。

我想要的格式是 HH:MM am。我使用的正则表达式是"(0[1-9]|[1][0-2])[:]" + "(0[0-9]|[1-5][0-9])[ ][A|a|P|p][M|m]"

我正在输入时间示例:08:30 AM 或 08:30 PM,但正则表达式显示错误消息。

谁能帮助我正确的正则表达式。

提前谢谢大家

【问题讨论】:

  • 嗯,你的正则表达式当然可以简化,但它确实匹配“08:30 AM” - 所以不清楚问题出在哪里。

标签: asp.net


【解决方案1】:

使用RegularExpressionValidator 及以下的ValidationExpression。我用过。

ValidationExpression="^(1[0-2]|0[1-9]):[0-5][0-9]\040(AM|am|PM|pm)$"

【讨论】:

    【解决方案2】:

    您不需要使用正则表达式,而是使用DateTime.TryParseDateTime.TryParseExact。我建议使用常规的TryParse 方法,因为它为访问者提供了灵活的格式(例如,一些访问者可能想要使用 24 小时制,而其他人可以使用 12 小时制)。

    String input;
    DateTime dt;
    if( !DateTime.TryParse( input, CultureInfo.InvariantCulture /* change if appropriate */, DateTimeStyles.None, out dt ) ) {
        // show error message
    }
    

    现在当您使用验证器时,您需要将此逻辑封装在 Validator 子类中,但这真的很简单:

    public class DateTimeValidator : BaseValidator {
    
        protected override bool EvaluateIsValid() {
    
            String controlValidationValue = base.GetControlValidationValue(base.ControlToValidate);
            if( String.IsNullOrEmpty( controlValidationValue ) ) return true;
    
            DateTime dt;
            return DateTime.TryParse( input, CultureInfo.InvariantCulture /* change if appropriate */, DateTimeStyles.None, out dt );
        }
    }
    

    那么(假设您已经在web.config 中注册了一个标签前缀)您需要做的就是:

    <label>
        Enter a valid date/time value.
        <input type="text" runat="server" id="someDate" />
        <myprefix:DateTimeValidator runat="server" controlToValidate="someDate" />
    </label>
    

    如果您希望该字段为必填项,则需要单独的 &lt;asp:RequiredFieldValidator&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-24
      • 2012-02-07
      • 2010-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-17
      • 2013-04-11
      相关资源
      最近更新 更多