2013-11-19 3 views
1

мне нужно знать, как я могу проверить номер, но это не любое число, мне нужно, чтобы проверить это:Regular Expression - Проверка номера

Если номер или если число между 0,50 и 100

я могу позволить 0 и любому другому номеру (с или без знаков после запятой, если есть, на максимуме 2 десятичных), но оно должно быть в пределах от 0,50 до 100.

Я получил это:

^[0-9]+\.?[0-9]*$ 

Но он проверяет любое число, и я не могу этого сделать.

Мне нужно проверить его в одном выражении, может кто-нибудь мне помочь? Спасибо.

+0

поэтому, чтобы быть ясным, число может быть только между 0 и 100 и может иметь десятичное значение, но если оно имеет десятичную величину, оно должно быть между 0,50 и 0,99? также, можете ли вы иметь 100,52 или 100 абсолютных максимумов? –

+2

Если это число, почему вы рассматриваете его как строку? Каждый язык или каркас, который я использовал, имеет способ попытаться проанализировать строку в один или несколько числовых типов; после этого вы можете использовать математические и логические операторы типа '(x == 0) || (x> = 0.50 && x <= 100) '. – alroc

+0

Нет, число может быть 0 или между 0.50 и 100, оно может иметь десятичные значения (кроме 100, которые являются максимальными) – Minion

ответ

2

Это один будет работать для вас:

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

Подробнее :

  • (?:10)?0: специальные чехлы для 0 и 100
  • 0\.(?:[5-9]\d?): соответствует 0,50 до 0,99 (в том числе 0,5, 0,6 ...)
  • (?:[1-9]|[1-9]\d)(?:\.\d{1,2}):
    • (?:[1-9]|[1-9]\d): целую часть, матч 1 до 9, и от 10 до 99
    • (?:\.\d{1,2}): десятичный часть, матч 00 до 99 (в том числе 0, 1, 2 ...)

Regular expression visualization

Debuggex Demo

+0

Не соответствует '0'. –

+0

@AlexFilipovici спасибо, ответ обновлен. – zessx

+0

@zessx Спасибо, это работает, я проверил некоторые цифры, и это сработало !, спасибо :) – Minion

1

попробовать это:

^(100|0|0?\.[5-9][0-9]?|[1-9][0-9]?(\.[0-9][0-9]?)?)$

+0

Не соответствует '0.50'. –

+0

@AlexFilipovici хорошо, добавлено в опции, чтобы разрешить '.5'' .50'' 0.5'' 0.50' –

2

Попробуйте это:

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

Regular expression visualization

Debuggex Demo

+0

Не соответствует 10, 20, 30 ... – zessx

+0

Я обновил свой ответ. –

+0

Не соответствует 0, мне нужно точно то, что вы сделали (от 0,5 до 100), но 0 (без десятичных знаков) тоже должно быть действительно, но это здорово :) – Minion

0

Я считаю, что это способ, чтобы написать это:

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

altough выглядит довольно неловко.

LE:

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

матчи: 0, 100, 0,50, 0,5, 1, 1,0, 1,15 и т.д.