Регулярное выражение для соответствия от 0,0 до 150,0 (включая число с плавающей запятой) - PullRequest
0 голосов
/ 08 сентября 2010

У меня проблема: я должен сопоставить значения от 0,0 до конкретного двойного значения (например, я должен сопоставить значения от 0,0 до 150,00, включая значение как 12, 21.23213, 149.111)

Кто-нибудь может мне помочь?

я попробовал все.

я использовал это регулярное выражение для совпадения от 0,0 до 60,0, но он не работает

(^0(\.[0-9]+)?$|^[1-9]{1}(\.[0-9]+)?$|^[1-5]{1}[0-9]{1}(\.[0-9]+)?$|^60$)

с 123 он не работает

заранее спасибо

Марко

Ответы [ 3 ]

14 голосов
/ 08 сентября 2010

Не используйте регулярное выражение - используйте Number, проверьте его число с помощью isNaN, затем сравните значения, используя <= и >=.

например

var your_val = "3.05";
var your_val_num = Number(your_val);
if (!isNaN(your_val_num) && your_val_num >= 0 && your_val_num <= 150) {
  // do something
}

NB Я изменил свой ответ, чтобы использовать Number вместо parseFloat, согласно комментарию AndyE, и проверять NaN перед выполнением числовых сравненийза комментарий Линкольнка.

8 голосов
/ 08 сентября 2010

Я согласен с другими ответами: регулярное выражение - плохой способ проводить числовые сравнения.

Если вам действительно нужно, либо:

  • , потому чтотупой фреймворк, с которым вы застряли, допускает только проверки регулярных выражений, или
  • вам нужна дополнительная десятичная точность, которую не может обеспечить число JavaScript (поскольку в JavaScript нет встроенного типа Decimal) ... это победило 'Это не подходит для сравнения целых чисел 0 и 150, хотя

, а затем:

^0*(                    // leading zeroes
150(\.0+)?|             // either exactly 150
1[0-4]\d(\.\d+)?|       // or 100-149.9*
\d{0,2}(\.\d+)?         // or 0-99.9*
)$

(новые строки / комментарии добавлены для удобства чтения, удалены для использования.)

Это не поддерживает E-нотацию (150 = 1.5E2), но в противном случае должно допускать то же, что и при обычном разборе номера JS.

3 голосов
/ 08 сентября 2010

забудьте регулярное выражение - просто проверьте, если (parseFloat (x) = <150 && parseFloat (x)> = 0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...