2015-09-29 5 views
0

Мне нужно регулярное выражение для проверки строки/десятичного числа в JavaScript.JavaScript regex для пользовательской проверки

который может быть не более длиной 9 элементов с 2 десятичными знаками

Просто

123 - valid 
123456789 - valid 
1234567896 - invalid (max 10 chars) 

123. - invalid 
123.2 - valid 
123.32 valid 
123.324 invalid (3 decimal points) 

Так что я написал регулярное выражение, как этот

/^([0-9]{1,9})+[.]+([0-9]{0,2})$/ 

Может ли один плз тонкой настройки это регулярное выражение

+0

Значит, '12345678.12' должен быть недействительным? – pawel

+0

как насчет ведущих нулей?действует? – outofmind

ответ

2

Вы можете использовать регулярное выражение ^(?=.{0,10}$)\d{0,9}(\.\d{1,2})?$

$('input').on('input', function() { 
 
    $(this).css('color', this.value.match(/^(?=.{0,10}$)\d{0,9}(\.\d{1,2})?$/) ? 'green' : 'red'); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<input type=text/>

Regex explanation here

Regular expression visualization

+0

Демо https://regex101.com/r/zZ2lH0/1 – Tushar

+0

@Tushar: thanks :) –

+0

Максимальное количество символов, которое позволяет это регулярное выражение, равно 12 . Это должно быть 9. –

2

Задайте вопрос:

^\d{1,9}(\.\d{1,2})?$ 
+2

Максимальное количество символов, которое разрешено этим регулярным выражением, равно 12. Это должно быть 9. –

1

Что-то вроде этого?

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

Максимальное количество символов, которое позволяет это регулярное выражение, равно 12. Это должно быть 9. –

+0

Вы интерпретировали такой вопрос? Я думал, он имел в виду, что это может быть 9 символов, плюс два десятичных знака. –

+0

** 'Который может быть максимум 9 элементов длиной с 2 ​​десятичными знаками' ** –

1

Вы можете использовать отрицательный предпросмотр в начале применить ограничение длины на весь матч:

^(?!\S{10})\d+(?:\.\d{1,2})?$ 

См regex demo

  • ^ - начало строки
  • (?!\S{10}) - нет более 9 символов без пробелов от начального до конечного состояния
  • \d+ - 1 или более цифр
  • (?:\.\d{1,2})? - 1 или нулевой группы . + 1 или w2 цифр
  • $ - конец строки

Однако, вы можете также просто соответствуют поплавок/целых чисел с ^\d+(?:\.\d{1,2})?$, а затем проверить длину совпадающего текста, чтобы решить, действительно ли это или нет.

Обратите внимание, что в случае, если вы должны опустить начальные нули, вам нужно, чтобы избавиться от них первым:

s = s.replace(/^0+/, ''); 

И затем использовать регулярное выражение выше.

Смежные вопросы