Как проверить или проверить введенное в текстовом поле в формате DD / MM / YYYY?

StackOverflow https://stackoverflow.com/questions/3005425

Вопрос

Как проверить или проверить введенное в текстовое поле в 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 вместо этого. Пример здесь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top