2015-06-05 2 views
7

Кажется, я снова застрял с простым регулярным выражением.Макс. 3 цифры, до 3 десятичных знаков

Что я хотел бы:

  • Число между 1 и 999
  • Дополнительно: запятая, знаком
  • Если знак запятой вводятся, минимум 1 десятичных и максимум 3 десятичных должны быть предвестником.

Разрешено:
999,0
999.999
999,99

Недопустимый:
-1
999,
999,9999

Это то, что я до сих пор:

^[0-9]{1,3}(?:\,[0-9]{1,3})?$ 

Любые советы?

+0

Это почти то же самое, его можно адаптировать тривиально для ваших нужд: http://stackoverflow.com/questions/26901088/regex-numbers-between-xx-xxx-xx –

ответ

4

Вы можете использовать это регулярное выражение:

/^[1-9]\d{0,2}(?:\,\d{1,3})?$/ 

RegEx Demo

Основное отличие от регулярных выражений OP является использование [1-9], который соответствует цифры от 1 до 9, прежде чем остальной части регулярного выражения.

+1

Мне бы это понравилось, если бы люди действительно объяснили, чтоir regex. – evolutionxbox

+0

Хм, странно. В вашей демонстрации она работает правильно.Тем не менее, при использовании этого он принимает запятую без десятичных знаков и когда присутствуют десятичные знаки, проверка не выполняется: s – Bv202

+0

Я использую Angular, используя директиву ng-pattern: ng-pattern = "/^[1-9] \ d {0,2} (?: \, \ d {1,3})? $/" – Bv202

5

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

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

Вот объяснение:

^[1-9]: Оно должно начинаться с цифры между 1 и 9

\d{0,2}: Сопровождаемый минимум 0, максимум 2 цифры (0-9)

(?:,: Задается запятой

\d{1,3})?: Если есть запятая должна следовать от одного до трех цифр

$: Конец строки

EXAMPLE

Спасибо @ DEV-нуль для этой ссылке: Explanation

+0

Мне понравилось бы, если бы люди действительно объяснили, что делает их регулярное выражение. – evolutionxbox

+0

@evolutionxbox http://regexper.com/#%5E%5B1-9%5D%5Cd%7B0%2C2%7D(%3F%3A%2C%5Cd%7B1%2C3%7D)%3F%24 – andlrc

+1

[ Тот же ответ уже опубликован] (http://stackoverflow.com/a/30662081/548225) – anubhava

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