Проверка 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/