#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
}