我正在使用带有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,但正则表达式显示错误消息。
任何人都可以帮助我正确的正则表达。
总而言之。
舒卜哈
答案 0 :(得分:7)
使用RegularExpressionValidator并在ValidationExpression下面。我用过它。
ValidationExpression="^(1[0-2]|0[1-9]):[0-5][0-9]\040(AM|am|PM|pm)$"
答案 1 :(得分:0)
您无需使用正则表达式,而是使用DateTime.TryParse
或DateTime.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>
。