Регулярное выражение для любого числа больше 0? [закрытый]



применение проверки к модели в MVC и хотел бы сделать это с помощью регулярного выражения.



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

874   14  

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.

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

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

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

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

другое решение:

^[1-9]\d*$

\d эквивалентно [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]*$

упрощенный только для 2 десятичных знаков.

^\s*(?=.*[1-9])\d*(?:\.\d{1,2})?\s*$

Ref:https://www.regextester.com/94470

Я думаю, что это будет прекрасно работать :

([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
[1-9]\.\d{1,2}|0\.((0?[1-9])|([1-9]0?)){1,2}\b

очень простой ответ на это используйте это: \d*

Comments

    Ничего не найдено.