Проверка MVC делает регулярное выражение числом только в поле строки

У меня есть следующее свойство в моей модели просмотра:

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

Независимо от того, что Uprn является string, я хочу выбросить ошибку проверки, если в поле Uprn на странице отправлено что-либо иное, кроме чисел.

С приведенным выше, я получаю сообщение об ошибке "UPRN должен быть числовым", независимо от того, является ли его строка или int

Что здесь происходит?

Ответ 1

Регулярное выражение неверно. Замените его на:

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

Не забудьте включить:

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

в вашем представлении для проверки jquery

Ответ 2

RegEx должен быть ^[0-9]*$.

т.е.

Свойство должно выглядеть так:

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

См. рабочий пример.


Я уверен, что у вас уже есть jQuery, но убедитесь, что jQuery проверяется, и включены проверки подлинности Microsoft.

<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

Или вы можете выполнить проверку длины в regexp:

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

Здесь regex визуализируется:

Regular expression visualization

Демоверсия Debuggex

Ответ 4

Я предлагаю вам использовать либо:

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

* обратите внимание, что он будет принят пустым, если вы удалите [Обязательный] и [MinLength (1)]

или используйте следующее:

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

который будет принимать только еще одну цифру

вы можете проверить свои регулярные выражения здесь: https://regex101.com/