Регулярный номер [-99.99 ..- 0.01] + [0.01..99.99] - PullRequest
1 голос
/ 05 января 2010

Я хочу подтвердить номер. Это число должно быть от -99,99 до +99,99, но кроме 0 (ноль). Я придумал это выражение RegEx

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

но он не обрабатывает номер этого типа:

x0
xy.00

Есть идеи?

Edit: Я пытаюсь сделать ограничение для файла xsd.

Ответы [ 4 ]

3 голосов
/ 05 января 2010

Попробуйте:

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

значение:

[+-]?                 # optional '+' or '-'
(                     #
  [1-9]\d?(\.\d\d?)?  #   1 - 99.99
  |                   #   OR
  0\.[1-9]\d?         #   0.1 - 0.99
  |                   #   OR
  0\.0[1-9]           #   0.01 - 0.09
)                     #
2 голосов
/ 05 января 2010

Попробуйте это регулярное выражение:

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

Это разрешит любое число, начинающееся с цифры, превышающей 0, за которой следует дополнительная необязательная цифра ([1-9]\d?(\.\d{1,2})?). Или, если он начинается с 0, за которым следует десятичная точка и затем либо последовательность, которая не допускает 00, либо 0 (0\.(\d?[1-9]|[1-9]\d)).

0 голосов
/ 05 января 2010

попробуйте

^\d{0,2}(\.\d{1,2})?$/
0 голосов
/ 05 января 2010

Ну, вы можете просто добавить еще два случая для пропущенных чисел ... начиная с вашего исходного регулярного выражения,

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

Кстати, а не \d{1,2} кажется немного лучше написать \d\d?; аналогично \d?, а не \d{0,1}.

В любом случае это похоже на упражнение на боль. Разве вы не можете использовать регулярное выражение, чтобы убедиться, что это число в нужном вам формате, и использовать отдельное ограничение, чтобы оно не было нулевым?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...