Атрибут ASP.NET MVC [RegularExpression] не работает при совпадении всей строки

Кажется, я не могу найти аналогичную тему в Stack Overflow по этому поводу, поэтому вот:

Почему, когда я указываю классу модели представления ASP.NET MVC следующее определение:

[Required]
[RegularExpression(@"\A\d{3,4}\Z",
   ErrorMessage = "The security code (CVN) must be between 3 - 4 digits long.")]
[Display(Name = "Card Security Code (CVN)")]
public string CardCVN { get; set; }

Что в моем ненавязчивом проверочном тесте на стороне клиента регулярное выражение не может быть проверено? (и впоследствии отображает ошибку поля формы).

Кажется, как только мое регулярное выражение изменено на [RegularExpression(@"\d{3,4}"..., удаляя всю технику сопоставления строк, оно идеально подходит? и кажется, что проверка jquery, которая отображается, даже если она не применяет \A или \Z, в любом случае соответствует только совпадению всей строки (делает то, что мне изначально нужно!); Я что-то пропустил?

Спасибо.


person GONeale    schedule 08.06.2011    source источник


Ответы (2)


На стороне клиента регулярное выражение выполняется JavaScript, а JS не поддерживает \A, \Z или \z. Вместо этого вы можете использовать ^ и $, но в этом нет необходимости. Регулярные выражения, используемые в валидаторах, обычно автоматически закрепляются на обоих концах. Я почти уверен, что это относится к ASP.NET MVC.

person Alan Moore    schedule 08.06.2011
comment
Спасибо, Алан. Интересно, можно было бы представить, что ASP.NET MVC действительно должен был преобразовать его тогда :) - person GONeale; 14.06.2011

Вместо этого используйте это: @"^\d{3,4}$"

^ - начало строки.

$ - конец строки.

person Evgeny Levin    schedule 08.06.2011
comment
Вы пропустили \ на \ d. Однако спасибо за ответ. Тем не менее, я награжу Алана баллами за то, что он объяснил свой ответ. - person GONeale; 14.06.2011