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