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