Простое регулярное выражение для десятичной дроби с точностью до 2

213

Что такое регулярное выражение для десятичного числа с точностью 2?

Действительные примеры:

123.12
2
56754
92929292929292.12
0.21
3.1

Недопустимые примеры:

12.1232
2.23332
e666.76

Десятичная точка может быть необязательной, а также могут быть включены целые числа.

Теги:

15 ответов

291
Лучший ответ

Действительные маркеры регулярных выражений различаются в зависимости от реализации. Самая общая форма, о которой я знаю, будет:

[0-9]+(\.[0-9][0-9]?)?

Самый компактный:

\d+(\.\d{1,2})?

Оба предполагают, что вы должны иметь как минимум одну цифру до, так и одну после десятичной точки.

Чтобы потребовать, чтобы вся строка была числом этой формы, оберните выражение в начальный и конечный теги, например (в форме Perl):

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

ДОБАВЛЕНО: Завершена дробная часть в()? чтобы сделать его необязательным. Имейте в виду, что это исключает такие формы, как "12." В том числе это будет больше похоже на ^\d+\.?\d{0,2}$.

  • 4
    Математически я думаю, что число точности 2 всегда должно иметь два знака после запятой, даже если последний равен нулю. Это основано на моем опыте со значительными цифрами, так что это может быть неправильно, но вы на самом деле не знаете, если 1,7 - 1,70 или любое число от 1,70 до 1,74.
  • 0
    ^\d+(?:\.\d{1,2})?$
Показать ещё 16 комментариев
191
^[0-9]+(\.[0-9]{1,2})?$

А поскольку регулярные выражения ужасны для чтения, а тем более понятны, вот многословный эквивалент:

^                   # Start of string.
[0-9]+              # Must have one or more numbers.
(                   # Begin optional group.
    \.              # The decimal point, . must be escaped, 
                    # or it is treated as "any character".
    [0-9]{1,2}      # One or two numbers.
)?                  # End group, signify it optional with ?
$                   # End of string.

Вы можете заменить [0-9] на \d в большинстве реализаций регулярных выражений (в том числе PCRE, наиболее распространенный). Я оставил его как [0-9], поскольку мне кажется, что его легче читать.

Кроме того, вот простой Python script, который я использовал для проверки:

import re
deci_num_checker = re.compile(r"""^[0-9]+(\.[0-9]{1,2})?$""")

valid = ["123.12", "2", "56754", "92929292929292.12", "0.21", "3.1"]
invalid = ["12.1232", "2.23332", "e666.76"]

assert len([deci_num_checker.match(x) != None for x in valid]) == len(valid)
assert [deci_num_checker.match(x) == None for x in invalid].count(False) == 0
  • 0
    Я хочу, чтобы до десятичного числа было не более 3 цифр, попробовал вот так безуспешно ^ ([0-9] {0,3}) + (\. [0-9] {1,2})? $
  • 1
    @Raghurocks Удалите + после первого закрытия, ^([0-9]{0,3})(\.[0-9]{1,2})?$
Показать ещё 5 комментариев
18

Чтобы добавить необязательный знак минуса и запретить такие номера, как 015 (который можно ошибочно принять за восьмеричные числа), напишите:

-?(0|([1-9]\d*))(\.\d+)?
  • 0
    Это позволяет альфа до десятичного для меня. Позволяет X.25
  • 0
    Это не ограничивает количество знаков после запятой до 2.
11

Для чисел, у которых нет разделителя тысяч, мне нравится это простое, компактное регулярное выражение:

\d+(\.\d{2})?|\.\d{2}

или, не ограничиваясь точностью 2:

\d+(\.\d*)?|\.\d+

Последние матчи
1
100
100.
100.74
100.7
0.7
+0,7
.72

И он не соответствует пустой строке (например,\d *.?\d * будет)

  • 0
    Я думаю, это также будет работать -? (\ D +)? (\. \ D {1,2})?
7
^[0-9]+(\.([0-9]{1,2})?)?$

Будет принято то, что нравится 12.. Это не то, что принято, но если в случае, если вам нужно быть "гибким", это один из способов. И, конечно, [0-9] можно заменить на \d, но, я думаю, его более читаемый таким образом.

5

Попробуйте это

 (\\+|-)?([0-9]+(\\.[0-9]+))

Это также даст положительные и отрицательные знаки.

4

Я использую это для двух знаков после запятой:
(^(\+|\-)(0|([1-9][0-9]*))(\.[0-9]{1,2})?$)|(^(0{0,1}|([1-9][0-9]*))(\.[0-9]{1,2})?$) Пропуска:
.25
0.25
10.25
+0.25

не проходит:
-.25
01.25
1.
1,256

  • 0
    Это также передает пустое значение.
2

В общем, то есть неограниченное число знаков после запятой:

^-?(([1-9]\d*)|0)(.0*[1-9](0*[1-9])*)?$.

2
preg_match("/^-?\d+[\.]?\d\d$/", $sum)
1

Это со мной работало:

(-?[0-9]+(\.[0-9]+)?)

Группа 1 - это номер вашего плавающего номера, а группа 2 - только фракция.

1

добавив мой ответ тоже, кто-то может найти его полезным или может быть правильным тоже.

function getInteger(int){
  var regx = /^[-+]?[\d.]+$/g;
  return regx.test(int);
}


alert(getInteger('-11.11'));
  • 0
    6....7.8.9 - допустимое число с использованием этого регулярного выражения.
1

Я попробовал один с моим проектом. Это позволяет номерам с + | - знаки также.

/^ (+ | -)? [0-9] {0} (.() {1} [0-9] {1}) {0,1} $/

1

Вам не нужно принимать во внимание e в e666.76?

С

(e|0-9)\d*\d.\d{1,2)
  • 0
    Нет, это было бы за рамками проекта! спасибо, хотя, это удобно :)
  • 0
    Оппс извините, следовало бы прочитать поподробнее !!
Показать ещё 1 комментарий
0

Chrome 56 не принимает такие шаблоны (Chrome 56 дополняет 11.11.) с номером типа, используйте тип как текст как прогресс.

-2
 function DecimalNumberValidation() {
        var amounttext = ;
            if (!(/^[-+]?\d*\.?\d*$/.test(document.getElementById('txtRemittanceNumber').value))){
            alert('Please enter only numbers into amount textbox.')
            }
            else
            {
            alert('Right Number');
            }
    }
Функция

будет проверять любое десятичное число, которое имеет число после запятой или нет, оно будет указывать "Правильное число", другое "Пожалуйста, введите только числа в текстовое поле суммы". появится предупреждающее сообщение.

Спасибо...:)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню