c# - ASP.NET MVC 2 client-side validation triggering incorrectly -


i using dataannotations enable client-side validation in asp.net mvc 2 project. having issue url validation regex passes unit test, fails in actual website.

model

[regularexpression(urlvalidation.regex, errormessage = urlvalidation.message)] public string url { get; set; }  regex = "(([\w]+:)?//)?(([\d\w]|%[a-fa-f\d]{2,2})+(:([\d\w]|%[a-fa-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(/([-+_~.\d\w]|%[a-fa-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fa-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fa-f\d]{2,2})*)?" 

message = "invalid url"

view

<div class="editor-label">     <%: html.labelfor(model => model.url) %> </div> <div class="editor-field">     <%: html.textboxfor(model => model.url) %>     <%: html.validationmessagefor(model => model.url) %> </div> 

result url = http://www.chicagoshakes.com/main.taf?p=7,8

alt text

passing unit test

[test] public void getvarurlpasses() {     var url = "http://www.chicagoshakes.com/main.taf?p=7,8";     var regex = new regex(urlvalidation.regex);     assert.istrue(regex.ismatch(url)); } 

does have idea why passing unit test, failing when test view in browser?

i can see several problems regex, what's tripping comma in p=7,8. regex doesn't match it, ismatch doesn't require to; it's happy stopping @ 7. guess client-side validator implicitly anchoring match. regex should anchored anyway; add ^ beginning , $ end, , should @ least consistent results. can change regex accommodate comma.

there's typo in regex: second f in [a-fa-f\d] should f. and, although it's not error have \d , \w in same set of square brackets, redundant; \w matches digits letters, can remove \d (and [\w\d] can reduced \w). finally, {2,2} should {2}.


Comments

Popular posts from this blog

asp.net - repeatedly call AddImageUrl(url) to assemble pdf document -

java - Android recognize cell phone with keyboard or not? -

iphone - How would you achieve a LED Scrolling effect? -