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

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

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

123.12
2
56754
92929292929292.12
0.21
3.1

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

12.1232
2.23332
e666.76

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

Ответ 1

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

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

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

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

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

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

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

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

Ответ 2

^[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

Ответ 3

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

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

Ответ 4

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

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

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

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

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

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

Ответ 5

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

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

Ответ 6

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

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

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

Ответ 7

Я использую это для двух знаков после запятой:
(^(\+|\-)(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

Ответ 8

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

Ответ 9

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

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

Ответ 10

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

С

(e|0-9)\d*\d.\d{1,2)

Ответ 11

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

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

Ответ 12

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

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


alert(getInteger('-11.11'));

Ответ 13

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

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

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

Ответ 14

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

Ответ 15

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

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

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