Регулярное выражение для даты не работает; MVC3 DataAnnotations - PullRequest
3 голосов
/ 22 ноября 2011

Я использую DataAnnotations в интерфейсе класса linq sql.Все в порядке.

У меня проблемы с полями даты и времени

Мой код выглядит следующим образом:

 [DataType(DataType.Date)]
    [RegularExpression(@"^([1-9]|0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$", ErrorMessage = "regexFail")]
    DateTime? DateofBirth { get; set; }

Теперь выражение типа данных работает нормально, оно приводит кдата, а не дата времени.Проблема заключается в проверке полей.Мое регулярное выражение не совпадает с датами, хотя я помещаю его в движок, и это соответствует.Например, я поставил «10/10/2010» в поле и получаю ошибку «regexFail».

Я вполне уверен, что у меня хорошее выражение лица, поэтому я не уверен, что случилось.

Заранее спасибо.

Ответы [ 2 ]

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

Я думаю, что происходит то, что значение DateTime преобразуется в строку, а затем сопоставляется с шаблоном.Если это так, и используется ToString, то в сопоставляемую строку будет включено время по умолчанию 12:00:00 AM.

Я попробовал следующий код и IsValid вернул true:

string pattern = @"^([1-9]|0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d\s12:00:00\sAM$";

RegularExpressionAttribute attribute = new RegularExpressionAttribute(pattern) { ErrorMessage = "regexFail" };
DateTime dt = new DateTime(2010, 10, 10);

bool isValid = attribute.IsValid(dt);
2 голосов
/ 22 ноября 2011

Декорирование поля DateTime с атрибутом [RegularExpression] не имеет никакого смысла.Этот атрибут используется с строковыми типами.Если у вас есть свойство DateTime, связыватель модели по умолчанию будет использовать текущий параметр культуры для анализа значения запроса в DateTime, предполагая, что это запрос POST, и будет использовать формат yyyy-MM-dd, если это был запрос GET.Итак, как вы можете видеть, это механизм связывания моделей по умолчанию, отвечающий за преобразование пользовательского HTTP-запроса в экземпляр поля DateTime, а валидатор RegularExpression не вступает в игру.

Так что если вы хотите ограничить даты, которыепользователь может ввести в некоторый пользовательский формат, который вы можете использовать пользовательское связующее для модели для дат.

То же самое относится и к другим типам значений, таким как целые и двойные числа.

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