C # Регулярное выражение для проверки даты? - PullRequest
14 голосов
/ 01 сентября 2009

Я пытаюсь подтвердить дату, введенную в текстовое поле. В текстовом поле есть маска ввода, которая заставляет вводить xx / xx / xxxx. Я пытаюсь использовать валидатор регулярных выражений, чтобы убедиться, что введена правильная дата. Я совершенно не квалифицирован в RegEx. Мой коллега нашел это в Интернете, но я не могу точно сказать, что он делает.

Это выглядит правильно? Кажется слишком сложным ...

(^((((0[1-9])|([1-2][0-9])|(3[0-1]))|([1-9]))\x2F(((0[1-9])|(1[0-2]))|([1-9]))\x2F(([0-9]{2})|(((19)|([2]([0]{1})))([0-9]{2}))))$)

Кто-нибудь знает менее сложное выражение, которое по сути делает то, что мне нужно?

Ответы [ 10 ]

36 голосов
/ 01 сентября 2009

Почему бы не использовать один из методов, доступных в пространстве имен System.DateTime ? Вы можете использовать DateTime.TryParse() ( edit: DateTime.TryParseExact(), вероятно, правильное предложение) для выполнения проверки.

24 голосов
/ 01 сентября 2009

Вы можете использовать DateTime.TryParseExact:

DateTime dt;

bool isValid = DateTime.TryParseExact(
    "08/30/2009",
    "MM/dd/yyyy",
    CultureInfo.InvariantCulture,
    DateTimeStyles.None,
    out dt);
7 голосов
/ 13 декабря 2012

Это правильное регулярное выражение для использования в формате даты дд / мм / гггг

^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$
3 голосов
/ 15 ноября 2013

В качестве альтернативы вы можете использовать CompareValidator вместо RegularExpressionValidator. Это выглядит так:

<asp:CompareValidator ID="CompareValidator2" runat="server" ControlToValidate="txtIssueDate" ErrorMessage="Invalid Date Format" Type="Date" Operator="DataTypeCheck" Display="Dynamic" Text="*" ForeColor="Red" ValidationGroup="valGroup1"></asp:CompareValidator>

3 голосов
/ 16 ноября 2011

Вышеуказанное регулярное выражение корректно для формата дд / мм / гггг. выражение

(^((((0[1-9])|([1-2][0-9])|(3[0-1]))|([1-9]))\x2F(((0[1-9])|(1[0-2]))|([1-9]))\x2F(([0-9]{2})|(((19)|([2]([0]{1})))([0-9]{2}))))$)
3 голосов
/ 01 сентября 2009

У Кеттенбаха была проблема. Его коллега предложил использовать регулярные выражения. У Кеттенбаха возникли две проблемы.

Как уже говорили другие, используйте DateTime.TryParse или DateTime.TryParseExact в пользовательском валидаторе и сохраните себе кошмар, который является регулярным выражением:)

1 голос
/ 17 декабря 2009

Последний ответ на самом деле правильный способ сделать. Используйте DateTime.TryParse.

Пример:

DateTime dt;
if(DateTime.TryParse(Textbox1.Text,out dt))
{
 Label1.Text = "Invalid date format";
}
0 голосов
/ 25 мая 2016
([0][1-9]|[1][0-9|][2][0-9]|[3][0-1])\/([0][1-9]|[1][0-2])\/[1-2][0-9][0-9][0-9]

для дд / мм / гггг (год может быть от 1000 до 2999)

или

(([0] [1-9] | [2] [0-9] | [3] [0-1] | [1-9] | [1] [0-9]) / ([ 0] [1-9] | [1] [0-2] | [1-9]) / ([1-2] [0-9] [0-9] [0-9] | [0-9 ] [0-9]))

, включая д / м / гг (например, 1/12/82)

0 голосов
/ 17 ноября 2013

Мы можем использовать CustomValidator и переопределить метод ServerValidate, чтобы проверить TryParse!

0 голосов
/ 01 сентября 2009

Это не совсем ответ, но не могли бы вы использовать DateTime.Parse или DateTime.TryParse, чтобы проверить правильность даты?

Либо так, либо используйте элемент управления DateTime, чтобы удостовериться, что невозможно ввести данные, которые не являются DateTime. Есть много JavaScript на эту тему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...