2013-11-22 3 views
3

Я пытаюсь создать Regular Expression Validation, который позволяетдесятичных значения Validate вплоть до й цифр больше нуля

а) Десятичные чисел до 3 знаков после запятой, которые больше нуля
б) положительной или отрицательной но отличные от нуля числа до 3 знаков после запятой

следующие пункты с (+), должны быть проверены, а (-) не должен за

(а)

(+) 0,872 
(+) 0,87 
(+) 0,8 
(+) 0,001 
(+) 1,000 
(+) 1,00 
(+) 1 
(+) 80,546 
(+) 80,000 
(+) 81,001 

(-) 0 
(-) 0,0 
(-) 0,00 
(-) 0,000 

также

(б) наиболее вероятно то же самое, что позволяет минус (-) перед числами.

Лучший возможный результат я достиг за (а) является

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

Что является лучшим решением для этой проблемы?

P.S. : Я использую это как значение атрибута MVC Model RegularExpression с проверкой jQuery. Таким образом, проверка Python и других версий RegExp не может быть и речи.

+2

Вам не нужно регулярное выражение для этого. Знаете ли вы, что достаточно двух простых утверждений 'if'? Если RegExp вам не нужен, я отправлю ответ. – matewka

+0

Конечно, я могу справиться с ситуацией как на стороне клиента, так и на стороне сервера, но компания требует ошибок, показанных как другие ошибки проверки. Это si, почему я заставляю писать его с помощью RegExp. – user3021830

+1

Вам еще не нужно RegExp для обнаружения ошибок. Какие ошибки вы хотите поймать? – matewka

ответ

1

Следующее регулярное выражение соответствует всем вашим примерам и их отрицательным аналогам (и отклоняет ваши несоответствующие примеры), а также несколько других тестовые примеры:

^-?(?!0(,0+)?$)\d+(,\d{1,3})?$ 

DEMO on RegexPal


Для обеспечения . как использование тысячелетней сепаратора:

^-?(?!0(\.000)*(,0+)?$)\d+(\.\d{3})*(,\d{1,3})?$ 

DEMO on RegexPal

+0

Это полностью решило проблему. Большое спасибо за решение. – user3021830

+0

А что, если я хочу использовать точку (.) Как разделитель тысяч? например. 80.908,563? – user3021830

+1

Просто обновил оба регулярных выражения, прежде чем они разрешили ввод, заканчивающийся запятой без десятичных цифр (например, '1.000,') – OGHaza

1

Вы можете попробовать простую инструкцию if, содержащую два условия.

  • !parseInt(number) - число равно нулю
  • number > parseInt(number) - число имеет более чем 3 десятичных цифр (обратите внимание, что ранее я умноженной число на 1000)


function checkNumber(number) { 
    number = Math.abs(parseFloat(number) * 1000); 
    if (!parseInt(number) || number > parseInt(number)) { 
     return false; 
    } 

    return true; 
} 

/** 
* EXAMPLES 
*/ 
checkNumber(0.872); //true 
checkNumber(1.00001); //false 
checkNumber(0.00); //false 
checkNumber(0.87); //true 
checkNumber(0.87215); //false 
Смежные вопросы