2011-01-10 2 views
-1

Мне нужно регулярное выражение, которое соответствует номерам от 0 до 99.999 (99,999 также верно).Regex для соответствия номерам 0-99.999

Допустимые примеры:

1,1 
99.9 
12.876 
1,777 

Недействительные примеры:

9837,83 
-12,24 
11.1112 
+4

Я не понимаю ваши требования. Вы говорите, что он должен начинаться с 0 и заканчиваться 99,999 или 99,999? Но ваши примеры не показывают этого. Можете ли вы сделать ваши примеры более ясными, разместив отдельные строки, пожалуйста. –

+0

Кроме того, в какой среде разработки вы работаете? –

+0

@ElRonnoco: Я почти вижу «цифры между 0-99.999» (и используя [десятичную запятую] (http://en.wikipedia.org/wiki/Decimal_mark#Countries_using_Arabic_numerals_with_decimal_comma)). –

ответ

1

Будет ли эта работа?

[0-9]{1,2}[.,][0-9]{1,3} 

это соответствует материал, похожий на этот:

  • 0.0/01,1
  • 99,999/09.009

, но не такие вещи, как это:

  • .0/,1/1/01
  • 099,999/09.0090

надеюсь, что это помогает.

+0

, если вы имеете в виду вещи la 10 или 25, то это по дизайну. Я никогда не видел, чтобы реквестер хотел сопоставить это. Я говорю это в сообщении :) –

2
^\d{1,2}(?:[.,]\d{1,3})?$ 

следует делать.

Объяснение:

^   # anchor the match at the start of the string 
\d{1,2} # match one or two digits 
(?:  # optionally match the following group: 
[.,]  # a . or , 
\d{1,3} # 1-3 digits 
)?  # end of optional group 
$   # anchor the match the end of the string 
2

Если вы желаете, чтобы проверить число находится в пределах определенного диапазона, вы не должны использовать Regex, он слишком далек от логики, что вы делаете и трудно отлаживать. Я бы сначала заменил запятые на десятичные точки. Затем проверьте диапазон.

например (Javascript)

function isValid(inputString) 
{ 
    var number=parseFloat(inputString.replace(',','.')); 
    return (number>=0 && number <=99.999); 
} 

Обновлено Ответ

выше решение не учитывает требования Ор, чтобы иметь не более 3 знаков после запятой точности.

function isValid(inputString){ 
    var number=parseFloat(inputString.replace(',','.')); 
    validPrecision = true; 
    if (inputString.split('.')[1]) { 
     validPrecision=inputString.split('.')[1].length<=3;} 
    return (number>=0 && number <=99.999 && validPrecision); 
}; 
+0

+1 Regex is overkill – marcog

+0

, и в качестве плюса он будет учитывать локали для десятичных и тысяч разделителей –

+0

Пожалуйста, оставляйте комментарии при downvoting! :) Благодаря –

1

Ниже будет работать:

^\d{1,2}((,|.)\d{1,3})?$ 
Смежные вопросы