14 ответов:
я не знаю, как MVC имеет отношение, но если Ваш идентификатор является целым числом, этот BRE должен сделать:
^[1-9][0-9]*$если вы хотите сопоставить реальные числа (поплавки), а не целые числа, вам нужно обработать случай выше, наряду с обычными десятичными числами (т. е.
2.5или3.3̅), случаи, когда ваш шаблон находится между 0 и 1 (т. е.0.25), а также случай, когда ваш шаблон имеет десятичную часть, равную 0. (т. е.2.0). И пока мы это делаем, мы добавим поддержку ведущих нулей целые числа (т. е.005):^(0*[1-9][0-9]*(\.[0-9]+)?|0+\.[0-9]*[1-9][0-9]*)$обратите внимание, что этот второй является расширенным RE. То же самое может быть выражено в основном огне, но почти все понимает в наши дни. Давайте разберем выражение на части, которые легче усваиваются.
^(курсор соответствует нулю в начале строки, поэтому перед вашим регулярным выражением с помощью курсора он привязывается к началу строки. Открывающая скобка находится там из-за or-bar, ниже. Об этом позже.
0*[1-9][0-9]*(\.[0-9]+)?это соответствует любому целому числу или любое число с плавающей запятой выше 1. Так что наши
2.0будет соответствовать, но0.25не будет. Элемент0*в начале обрабатывает ведущие нули, так что005 == 5.|символ трубы - это "или-баре" в этом контексте. Для целей оценки этого выражения оно имеет более высокий приоритет, чем все остальное, и эффективно объединяет два регулярных выражения вместе. Круглые скобки используются для группировки нескольких выражений, разделенных столбиками или.
и вторая часть:
0+\.[0-9]*[1-9][0-9]*это соответствует любому числу, которое начинается с одного или нескольких
0символы (замените+С*чтобы соответствовать ноль или более нулей, т. е..25), а затем точка, а затем строка цифр, которая включает в себя по крайней мере один, который не является0. Так что это соответствует всему выше0и ниже1.)$и, наконец, мы закрываем скобки и привязываем регулярное выражение к концу строки со знаком доллара, так же, как каретка привязывается к началу строки.
конечно, если вы позволите вашему языку программирования оценивать что-то численно, а не пытаться сопоставить его с регулярным выражением, вы сэкономите головные боли и CPU.
код:
^([0-9]*[1-9][0-9]*(\.[0-9]+)?|[0]+\.[0-9]*[1-9][0-9]*)$Пример:http://regexr.com/3anf5
Я думаю, что лучшим решением является добавление знака + между двумя скобками выражения regex:
^[1-9]+[0-9]*$
поехали:
MatchCollection myMatches = Regex.Matches(yourstring, @"[1-9][0-9]*");on submit:
if(myMatches.Count > 0) { //do whatever you want }
Я попытался это и он работал для меня, для всех десятичное число/целое число больше нуля
позволяет пробелом:
^\s*(?=.*[1-9])\d*(?:\.\d{1,2})?\s*$нет пробела:
^(?=.*[1-9])\d*(?:\.\d{1,2})?$ссылки: регулярное выражение больше нуля с 2 десятичными знаками
вы можете использовать следующие выражения:
(^\d*\.?\d*[1-9]+\d*$)|(^[1-9]+\.?\d*$)допустимые значения: 1 1. 1.1 1.0 все положительные вещественные числа
недействительной записи: все отрицательные действительные числа и 0 и 0,0
Я думаю, что это будет прекрасно работать :
([1-9][0-9]*(\.[0-9]*[1-9])?|0\.[0-9]*[1-9])действующий:
1 1.2 1.02 0.1 0.02не действует :
0 01 01.2 1.10
Comments