Регулярное выражение Javascript для суммы

#javascript #regex

#javascript #регулярное выражение

Вопрос:

Я пытаюсь получить регулярное выражение для суммы:

ЛЮБАЯ ЦИФРА ТОЧКА (минимум ноль, не более единицы) ЛЮБАЯ ЦИФРА (минимум ноль, не более двух [если возможно, либо ноль, ЛИБО два])

Что у меня есть:

 /^d .{0,1} d{0,2) $/
  

… очевидно, не работает. Примеры того, что я пытаюсь сделать:

123 допустимо

123.00 допустимо

12.34.5 неверно

123.000 неверно

Попытка сопоставить сумму с точкой или без нее. Если период включен, может быть только один раз и не более двух цифр после.

Комментарии:

1. Обычно есть гораздо лучшие способы определения числа. parseFloat например.

2. @RikudoSennin parseFloat может использоваться как попытка преобразовать строку в число, что может привести к NaN , или нежелательному числу. Регулярные выражения могут использоваться для проверки строки.

3. Да, хотя, если parseFloat вернет a NaN , это, вероятно, будет означать, что это недопустимое число.

Ответ №1:

Выделите десятичную точку и 1 или 2 цифры после десятичной точки в отдельную необязательную группу:

 /^d (.d{1,2})?$/
  

Тесты:

 > var re = /^d (.d{1,2})?$/
  undefined
> re.test('123')
  true
> re.test('123.00')
  true
> re.test('123.')
  false
> re.test('12.34.5')
  false
> re.test('123.000')
  false
  

Комментарии:

1. 1 это то, что я тоже придумал … за исключением того, что мой браузер решил зависнуть, когда я его публиковал: (

2. что вы делаете, когда у вас есть 100,000.00?

3. @maazza обработка такого ввода не была частью первоначального вопроса.

Ответ №2:

Вы пробовали:

 /^d (.d{1,2})?$/
  

? Делает группу (.d{1, 2}) необязательной (т. Е. Соответствует 0 или 1 раз).

Ответ №3:

Будет ли что-то вроде этого работать?

 // Check if string is currency
var isCurrency_re    = /^s*( |-)?((d (.dd)?)|(.dd))s*$/;
function isCurrency (s) {
   return String(s).search (isCurrency_re) != -1
}