1

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

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

谢谢大家

舒巴

4

2 回答 2

7

使用 RegularExpressionValidator 及以下 ValidationExpression。我用过那个。

ValidationExpression="^(1[0-2]|0[1-9]):[0-5][0-9]\040(AM|am|PM|pm)$"
于 2012-09-27T06:13:01.170 回答
0

您不需要使用正则表达式,使用DateTime.TryParseorDateTime.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>如果您希望该字段是必需的,您将需要一个单独的字段。

于 2012-09-27T06:13:59.607 回答