Как проверить или подтвердить введенное в текстовое поле дату в формате ДД / ММ / ГГГГ? - PullRequest
3 голосов
/ 09 июня 2010

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

Ответы [ 8 ]

18 голосов
/ 09 июня 2010

Markup:

<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);
4 голосов
/ 09 июня 2010

Другой вариант - использование валидатора регулярных выражений. Приведенное ниже регулярное выражение проверяет наличие ДД / ММ / ГГГГ, но, разумеется, нет никакого способа отличить, является ли что-то вроде 01 ДД или ММ. Иначе это делает трюк.

<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$" />
1 голос
/ 13 октября 2011
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;
}
0 голосов
/ 09 июня 2010

Мой подход заключается в использовании regexvalidator для первого быстрого теста («похоже, это может быть дата») на стороне клиента. А затем CustomValidator с серверным событием, которое пытается выполнить DateTime.Parse с моим форматом, чтобы исключить такие даты, как «29 февраля 2010».

Лично я не доверяю CompareValidator здесь, потому что я точно не знаю, какой формат он использует (но это может быть потому, что я недостаточно исследовал).

0 голосов
/ 09 июня 2010

Вам будет лучше использовать элемент управления календаря, но если вы все равно хотите проверить строку даты, используйте следующий код, чтобы проверить, что он имеет формат 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
}
0 голосов
/ 09 июня 2010

Пользовательский валидатор можно использовать для проверки практически всего в текстовом поле, но может быть проще использовать CompareValidator , чтобы проверить, можно ли преобразовать текст в дату.

Я нашел пример (в VB, но достаточно легкий для чтения и перевода на C #) здесь: http://quickstarts.asp.net/QuickStartv20/aspnet/doc/validation/default.aspx

Однако использование какого-либо элемента управления выбора даты может быть более удобным для пользователя.

0 голосов
/ 09 июня 2010

Вы можете использовать CustomValidator , чтобы проверить, что введенное значение находится в пределах установленных параметров.
Т.е. 13/12/2001 является действительным, но 13/12/2001 недействительным.

0 голосов
/ 09 июня 2010

Вы не можете. Вместо этого используйте какой-нибудь сборщик даты и времени. Пример здесь .

...