У меня есть POCO Entity Frameworks со свойством, определенным следующим образом:
[RegularExpression(ValidationHelper.RegularExpressionForDateOnly)]
public virtual DateTime LastBuildDate { get; set; }
Где константа определяется следующим образом:
public const String RegularExpressionForDateOnly =
@"^(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$";
Я получил это регулярное выражение прямо из OWASP: https://www.owasp.org/index.php/OWASP_Validation_Regex_Repository
Теперь в представлении MVC3 у меня есть:
<tr>
<td class="editor-label">
@Html.LabelFor(model => model.LastBuildDate)
</td>
<td class="editor-field">
@Html.EditorFor(model => model.LastBuildDate)
@Html.ValidationMessageFor(model => model.LastBuildDate)
</td>
</tr>
Когда я пытаюсь указать дату в формате «30.05.2012» или «30.05.2012», она не проходит проверку (на стороне клиента и на стороне сервера). Если я попробую это регулярное выражение вручную, это регулярное выражение ДОЛЖНО разрешать эти форматы. Однако, когда представление MVC3 проверяется с ним, оно не проходит проверку.
По какой другой причине MVC может не пройти эту проверку регулярного выражения?