使用正则表达式验证时间HH:MM am或pm格式

时间:2012-09-27 06:09:57

标签: asp.net

我正在使用带有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,但正则表达式显示错误消息。

任何人都可以帮助我正确的正则表达。

总而言之。

舒卜哈

2 个答案:

答案 0 :(得分:7)

使用RegularExpressionValidator并在ValidationExpression下面。我用过它。

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

答案 1 :(得分:0)

您无需使用正则表达式,而是使用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>

如果您需要该字段,则需要单独的<asp:RequiredFieldValidator>