Регулярное выражение для любого числа больше 0? - программирование
Подтвердить что ты не робот

Регулярное выражение для любого числа больше 0?

Применение проверки для модели в MVC и ее использование с помощью Regex.

Чтобы проверить, что идентификатор моей модели больше 0, отправьте.

Я не знаком с Regex... может кто-нибудь помочь мне?

Спасибо

4b9b3361

Ответ 1

Я не знаю, как MVC имеет значение, но если ваш идентификатор является целым числом, этот BRE должен делать:

    ^[1-9][0-9]*$

Если вы хотите сопоставить действительные числа (float), а не целые числа, вам необходимо обработать вышеприведенный случай, а также обычные десятичные числа (т.е. 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. То же самое можно выразить в Basic RE, но почти все понимают ERE в наши дни. Позвольте разложить выражение на части, которые легче усваивать.

    ^(

Каретка соответствует нулевому значению в начале строки, поэтому перед вашим регулярным выражением с помощью каретки привязывает его к началу строки. Открывающая скобка находится из-за or-bar, ниже. Подробнее об этом позже.

      0*[1-9][0-9]*(\.[0-9]+)?

Это соответствует любому целому числу или любому числу с плавающей запятой выше 1. Таким образом, наш 2.0 будет сопоставляться, но 0.25 не будет. 0* в начале обрабатывает начальные нули, поэтому 005 == 5.

                              |

В этом контексте символ трубы является "or-bar". Для оценки этого выражения он имеет более высокий приоритет, чем все остальное, и эффективно объединяет два регулярных выражения вместе. Круглые скобки используются для группировки нескольких выражений, разделенных символами or-bars.

И вторая часть:

                               0+\.[0-9]*[1-9][0-9]*

Это соответствует любому числу, начинающемуся с одного или нескольких символов 0 (замените + на * на нуль или более нулей, т.е. .25), за которым следует период, за которым следует строка цифр который включает по крайней мере один, который не является 0. Таким образом, это соответствует всем выше 0 и ниже 1.

                                                    )$

И, наконец, мы закрываем круглые скобки и привязываем регулярное выражение к концу строки знаком доллара, точно так же, как каретка привязывается к началу строки.

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

Ответ 2

Как насчет этого: ^[1-9][0-9]*$

Ответ 4

там вы идете:

MatchCollection myMatches = Regex.Matches(yourstring, @"[1-9][0-9]*");

on submit:

if(myMatches.Count > 0)
{
   //do whatever you want
}

Ответ 5

Я пробовал это, и он работал у меня для всех десятичных/целых чисел больше нуля

Позволяет пробелу: ^\s*(?=.*[1-9])\d*(?:\.\d{1,2})?\s*$

Нет пробела: ^(?=.*[1-9])\d*(?:\.\d{1,2})?$

Ссылка: Regex больше нуля с 2 десятичными знаками

Ответ 6

Если вам нужны только целые неотрицательные числа, попробуйте: ^\d+$

Ответ 7

Я думаю, что лучшим решением является добавление знака + между двумя скобками выражения регулярного выражения:

^[1-9]+[0-9]*$

Ответ 8

Вы можете использовать следующее выражение:

(^\d*\.?\d*[1-9]+\d*$)|(^[1-9]+\.?\d*$)                  

Допустимые значения: 1 1. 1.1 1.0 все положительные действительные числа

Недействительные записи: все отрицательные действительные числа и 0 и 0.0

Ответ 9

Простой ответ: ^[1-9][0-9]*$

Ответ 10

Я думаю, что это отлично работает:

([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

Ответ 11

[1-9]\.\d{1,2}|0\.((0?[1-9])|([1-9]0?)){1,2}\b

Ответ 12

^\$? ([1-9] {1} [0-9] {0,2} (\, [0-9] {3}) * (. [0-9] {0,2 }) |? [1-9] {1} [0-9] {0} ([0-9] {0,2}) |.?. 0 ([0-9] {0,2})? | (. [0-9] {1,2})?) $

Ответ 13

Очень простой ответ на этот вопрос:\d *