Ответ 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
.
)$
И, наконец, мы закрываем круглые скобки и привязываем регулярное выражение к концу строки знаком доллара, точно так же, как каретка привязывается к началу строки.
Конечно, если вы позволите своему языку программирования оценивать что-то численно, а не пытаться сопоставить его с регулярным выражением, вы сохраните головные боли и процессор.