Ответ 1
Почему бы не использовать один из методов, доступных в System.DateTime
namespace? Вы можете использовать DateTime.TryParse()
( изменить: DateTime.TryParseExact()
, вероятно, является правильным предложением) для выполнения проверки.
Я пытаюсь проверить дату, введенную в текстовое поле. В текстовом поле есть входная маска, которая заставляет вход 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}))))$)
Кто-нибудь знает о менее сложном выражении, которое по существу делает то, что мне нужно?
Почему бы не использовать один из методов, доступных в System.DateTime
namespace? Вы можете использовать DateTime.TryParse()
( изменить: DateTime.TryParseExact()
, вероятно, является правильным предложением) для выполнения проверки.
Вы можете использовать DateTime.TryParseExact
:
DateTime dt;
bool isValid = DateTime.TryParseExact(
"08/30/2009",
"MM/dd/yyyy",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out dt);
Это будет правильное регулярное выражение для использования в формате даты dd/mm/yyyy
^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$
У Кеттенбаха была проблема. Его коллега предложил использовать регулярные выражения. Тогда у Кеттенбаха было две проблемы.
Как говорили другие, используйте DateTime.TryParse
или DateTime.TryParseExact
в пользовательском валидаторе и сохраните кошмар, который является регулярным выражением:)
Вышеуказанное регулярное выражение корректно для формата 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}))))$)
В качестве альтернативы вы можете использовать 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>
Мы можем использовать CustomValidator и использовать переопределить метод ServerValidate для проверки TryParse!
([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)
На самом деле это не ответ, но вы не могли бы использовать DateTime.Parse
или DateTime.TryParse
, чтобы проверить, что дата верный?
Либо это, либо используйте элемент управления DateTime
, чтобы убедиться, что невозможно ввести данные, которые не являются DateTime. Там много JavaScript на эту тему.
Последний ответ на самом деле является правильным способом. Используйте DateTime.TryParse
.
Пример:
DateTime dt;
if(DateTime.TryParse(Textbox1.Text,out dt))
{
Label1.Text = "Invalid date format";
}