Как проверить или проверить введенное в текстовом поле в формате DD / MM / YYYY?
-
25-09-2019 - |
Вопрос
Как проверить или проверить введенное в текстовое поле в DD/MM/YYYY
формат?
Решение
Разметка:
<asp:Textbox runat="server" ID="TextBox1" />
<asp:CustomValidator runat="server" ControlToValidate="TextBox1" ErrorMessage="Date was in incorrect format" OnServerValidate="CustomValidator1_ServerValidate" />
Код-позади:
protected void CustomValidator1_ServerValidate(object sender, ServerValidateEventArgs e)
{
DateTime d;
e.IsValid = DateTime.TryParseExact(e.Value, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out d);
}
Если вы хотите разрешить несколько форматов и только их, используйте следующую:
DateTime.TryParseExact(e.Value, new[] { "dd/MM/yyyy", "yyyy-MM-dd" }, CultureInfo.InvarinatCulture, DateTimeStyles.None, out d);
Другие советы
Другой вариант использует вариатор регулярного выражения. Регулярное выражение ниже проверки DD / MM / YYYY, но, конечно, нет возможности отличить, если что-то вроде 01 - DD или мм. В противном случае это делает трюк.
<asp:TextBox ID="txtDate" runat="server"/>
<asp:RegularExpressionValidator ID="regexpName" runat="server"
ErrorMessage="This expression does not validate."
ControlToValidate="txtDate"
ValidationExpression="^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$" />
DateTime Result;
DateTimeFormatInfo info = new DateTimeFormatInfo ( );
CultureInfo culture;
culture = CultureInfo.CreateSpecificCulture ( "en-US" );
info.ShortDatePattern = "dd/MM/yyyy";
if ( DateTime.TryParse ( StrDate, info, DateTimeStyles.None, out Result ) )
{
return StrDate;
}
Вы могли бы использовать CustomValiadator. Чтобы убедиться, что введенное значение находится в настройках параметров.
То есть 13/12/2001 действительна, но 12.12.2001 недействительна.
Вы будете лучше использовать календарный элемент управления, но если вы хотите проверить строку даты в любом случае, используйте следующий код, чтобы подтвердить, что то есть в формате DD / MM / YYYY.
DateTime dt;
if (!DateTime.TryParse(texbox.Text, new System.Globalization.CultureInfo("en-GB"), System.Globalization.DateTimeStyles.None, dt))
{
// text is not in the correct format
}
Вы можете использовать пользовательский валидатор, чтобы проверить практически в текстовом поле, но может быть проще в использовании Сравнительный Чтобы проверить, может ли текст можно преобразовать в дату.
Я нашел пример (в VB, но достаточно легко читать и переводить на C #) здесь: http://quickstarts.asp.nest/quickstartv20/aspnet/doc/validation/default.aspx.
Тем не менее, использование какого-либо контроля собора даты может быть более удобным для пользователя.
Мой подход будет использовать регенциюVVALDATOR для первого быстрого теста («Похоже, это может быть дата»). А затем AuStvaLiadator с событием серверов, который пытается выполнить DateTime.parse с моим форматом, исключить даты типа «29 февраля 2010».
Лично я не доверяю сравненномуравнилистатуру здесь, потому что я не знаю, на что он использует формат (но это может быть, потому что я не расследовал достаточно).
Вы не можете. Пользователь какой-то артиллер PateTime вместо этого. Пример здесь.