2015-05-29 12 views
12

Mam następującą właściwość w moim modelu widoku:MVC Validation uczynić wyrażenie regularne numeryczny tylko na polu Parametry

[Required] 
[MaxLength(12)] 
[MinLength(1)] 
[RegularExpression("[^0-9]", ErrorMessage = "UPRN must be numeric")] 
public string Uprn { get; set; }  

Niezależnie od Uprn bycia string chcę rzucać się błąd sprawdzania, czy istnieje coś innego niż liczb wprowadzono do pola Uprn na stronie submit.

z powyższym, otrzymuję błąd „UPRN musi być numeryczny” czy ITS ciąg lub int

Co tu się dzieje?

+0

Czy twoja własność jest tablicą? To jest tylko ciąg w kodzie? –

+0

Przepraszam, chciałem tylko tablicy, jak w 1234 lub cześć – JsonStatham

+0

Aby wyjaśnić, dlaczego regex jest źle, '^' wewnątrz '[]' oznacza * nie * - więc mówisz: pozwalają na wszystko * z wyjątkiem liczb *. –

Odpowiedz

24

Wyrażenie regularne jest nieprawidłowe. Wymień go:

[Required] 
[MaxLength(12)] 
[MinLength(1)] 
[RegularExpression("^[0-9]*$", ErrorMessage = "UPRN must be numeric")] 
public string Uprn { get; set; }  

Nie zapomnij podać:

@Scripts.Render("~/bundles/jqueryval") 

w widoku walidacji jquery

3

regex powinny być ^[0-9]*$.

I.E.

Obiekt powinien wyglądać następująco:

[Required] 
[MaxLength(12)] 
[MinLength(1)] 
[RegularExpression("^[0-9]*$", ErrorMessage = "UPRN must be numeric")] 
public string Uprn { get; set; } 

Zobacz pracuje example.


Jestem pewien, że masz już jQuery odwoływać ale upewnij jQuery sprawdzania i Microsoft walidacji skrypty są włączone.

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 

<script src="//ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script> 

<script src="//ajax.aspnetcdn.com/ajax/mvc/4.0/jquery.validate.unobtrusive.min.js"></script> 
3

Albo można zrobić walidacji długość w regexp:

[Required] 
[RegularExpression("^[0-9]{1,12}$", ErrorMessage = "...")] 
public string Uprn { get; set; } 

Oto regex wizualizowane:

Regular expression visualization

Debuggex Demo

+1

W ten sposób otrzymasz tylko jeden komunikat o błędzie, oddzielony od siebie możesz określić różne komunikaty o błędach dla każdego warunku :) –

1

Proponuję użyć albo:

[RegularExpression("\d*", ErrorMessage = "UPRN must be numeric")] 

* pamiętać, że zaakceptuje pusty jeśli usuniesz [Wymagane] i [MINLENGTH (1)]

lub użyć następujących:

[RegularExpression("\d+", ErrorMessage = "UPRN must be numeric")] 

który akceptuje tylko jeden więcej cyfr

Możesz przetestować swoje wyrażenia regularne tutaj: https://regex101.com/