С# Регулярное выражение для проверки даты?

Я пытаюсь проверить дату, введенную в текстовое поле. В текстовом поле есть входная маска, которая заставляет вход 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}))))$)

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

Ответы

Ответ 1

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

Ответ 2

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

DateTime dt;

bool isValid = DateTime.TryParseExact(
    "08/30/2009",
    "MM/dd/yyyy",
    CultureInfo.InvariantCulture,
    DateTimeStyles.None,
    out dt);

Ответ 3

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

^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$

Ответ 4

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

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

Ответ 5

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

(^((((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}))))$)

Ответ 6

В качестве альтернативы вы можете использовать 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>

Ответ 7

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

Ответ 8

([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]

для dd/mm/yyyy (год может составлять от 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]))

который включает d/m/yy (например, 1/12/82)

Ответ 9

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

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

Ответ 10

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

Пример:

DateTime dt;
if(DateTime.TryParse(Textbox1.Text,out dt))
{
 Label1.Text = "Invalid date format";
}