Я не знаю, как 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. То же самое можно выразить в Basic RE, но почти все понимают ERE в наши дни. Давайте разложим выражение на части, которые легче переваривать.
^(
Каретка соответствует нулю в начале строки, так что предшествующий ваше регулярное выражение с кареткой анкеры его к началу строки. Открывающая скобка находится из-за or-bar, ниже. Об этом позже.
0*[1-9][0-9]*(\.[0-9]+)?
Это соответствует любому целому числу или любого число с плавающей точкой выше 1. Таким образом, нашей 2.0
вошьет, но 0.25
не будет. 0*
на старте обрабатывает ведущие нули, поэтому 005 == 5
.
|
Символ трубы является «или штрих-» в этом контексте. Для оценки этого выражения он имеет более высокий приоритет, чем все остальное, и эффективно объединяет два регулярных выражения вместе. Круглые скобки используются для группировки нескольких выражений, разделенных символами or-bars.
И вторая часть:
0+\.[0-9]*[1-9][0-9]*
Это соответствует любому количеству, которое начинается с одного или нескольких 0
символов (заменить +
с *
соответствовать нулю или больше нулей, т.е. .25
), за которым следует период, за которым следует по строке цифр, которая включает по меньшей мере одну, которая не является 0
. Таким образом, это соответствует всем выше 0
и ниже 1
.
)$
И, наконец, мы закрываем круглые скобки и закрепить регулярное выражение в конце строки со знаком доллара, так же, как каретка анкерами к началу строки.
Конечно, если вы позволите своему языку программирования оценивать что-то численно, а не пытаться сопоставить его с регулярным выражением, вы сохраните головные боли и CPU.
Почему это должно быть регулярным выражением? Это плохой инструмент для использования в этой задаче – Gareth
Gareth, в некоторых случаях аналитика google позволяет использовать только регулярное выражение или точное соответствие ;-) – Skuta