Reputation: 10374
I have the following property in my view model:
[Required]
[MaxLength(12)]
[MinLength(1)]
[RegularExpression("[^0-9]", ErrorMessage = "UPRN must be numeric")]
public string Uprn { get; set; }
Regardless of Uprn
being a string
, I want to throw a validation error if there is anything other than numbers entered into the Uprn box on page submit.
With the above, I am getting the error "UPRN must be numeric" whether its a string or int
What's going on here?
Upvotes: 35
Views: 122094
Reputation: 2132
I suggest you use either:
[RegularExpression("\d*", ErrorMessage = "UPRN must be numeric")]
*note that it will accept empty if you remove [Required] and [MinLength(1)]
or use the following:
[RegularExpression("\d+", ErrorMessage = "UPRN must be numeric")]
which will only accept one more digits
you can test your regular expressions here: https://regex101.com/
Upvotes: 3
Reputation: 100786
Or you could do the length validation in the regexp:
[Required]
[RegularExpression("^[0-9]{1,12}$", ErrorMessage = "...")]
public string Uprn { get; set; }
Here's the regex visualized:
Upvotes: 10
Reputation: 7301
The RegEx should be ^[0-9]*$
.
I.E.
The property should look like:
[Required]
[MaxLength(12)]
[MinLength(1)]
[RegularExpression("^[0-9]*$", ErrorMessage = "UPRN must be numeric")]
public string Uprn { get; set; }
See working example.
I'm sure you already have jQuery referenced but make sure jQuery validate and Microsoft validate scripts are included.
<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>
Upvotes: 7
Reputation: 21136
The regular expression is wrong. Replace it with:
[Required]
[MaxLength(12)]
[MinLength(1)]
[RegularExpression("^[0-9]*$", ErrorMessage = "UPRN must be numeric")]
public string Uprn { get; set; }
Don't forget to include:
@Scripts.Render("~/bundles/jqueryval")
in your view for the jquery validation
Upvotes: 59