Простий регулярний вираз для десяткової точки з точністю 2


271

Який регулярний вираз для десяткової точки з точністю до 2?

Дійсні приклади :

123.12
2
56754
92929292929292.12
0.21
3.1

Недійсні приклади:

12.1232
2.23332
e666.76

Десяткова крапка може бути необов’язковою, а також можуть бути включені цілі числа.


1
Пов’язано: про десятковий з тисячним роздільником див. Stackoverflow.com/questions/16148034/…
Yeo

1
Найкращою відповіддю тут: stackoverflow.com/a/39399503/715269
Гангнус

Відповіді:


397

Дійсні маркери регулярних виразів залежать від реалізації. Узагальненою формою є:

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

Більш компактний:

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

Обидва припускають, що обидва мають принаймні одну цифру до і одну після десяткових знаків.

Щоб вимагати, щоб цілий рядок був номером цієї форми, загортайте вираз у початкові та кінцеві теги, такі як (у формі Perl):

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

Щоб зіставити числа без провідної цифри перед десятковим ( .12) і цілими числами, що мають проміжок часу ( 12.), не враховуючи введення одного періоду ( .), спробуйте наступне:

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

Додано

Згорнули дробову частину, ()?щоб зробити її необов'язковою. Майте на увазі, що це виключає такі форми, як " 12. Включно", які б більше нагадували ^\d+\\.?\d{0,2}$.

Додано

Використовуйте ^\d{1,6}(\.\d{1,2})?$для зупинки повторення та обмеження на всю частину десяткового значення.


4
Математично я вважаю, що число 2 точності завжди повинно мати два десяткових числа, навіть якщо останнє дорівнює нулю. Це ґрунтується на моєму досвіді зі значущими цифрами, тому це може бути неправильним, але ви насправді не знаєте, чи 1,7 - 1,70 чи будь-яке число від 1,70 до 1,74.
paxdiablo

Дякую! Було саме те, що мені потрібно :) +1
alex

6
це збіг 0001.00: /
redben

2
Додано "-?" у цьому ^ \ d + (\. \ d {1,2})? $ ===> ^ -? \ d + (\. \ d {1,2})? $ для підтримки
-ve

1
@BimalDas, ви можете підтримувати мінуси, додаючи вираз за допомогою -?, як у -?\d+(\.\d{1,2})?. Я не включав негативів або починаючи з десяткової крапки, оскільки їх не було у запитанні ОП, хоча вони, безумовно, дійсні для більш загального формату чисел. Нитка коментарів тут дає кілька способів вирішити ".21".
DocMax

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

А оскільки регулярні вирази жахливо читати, набагато менше розуміти, ось дослівний еквівалент:

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

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

Також ось простий скрипт Python, який я перевіряв:

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 цифри перед десятковою, спробував так, без удачі ^ ([0-9] {0,3}) + (\. [0-9] {1,2})? $
Raghurocks

3
@Raghurocks Видалити +після першого закриття ^([0-9]{0,3})(\.[0-9]{1,2})?$
батьків

Для користувачів Java: десятковий знак не слід уникати.

3
@Gracchus Ви впевнені? Ймовірно, це має бути \\.замість того, \.що .буде виглядати так, як це працює, але відповідає будь-якому символу (не лише десятковому знаку). Наприклад, і те, 1z23і 1.23може вважатись дійсним, якщо ви не
уникнете

@dbr Можливо, так і має бути. Ява просто скаржився на неправильне втечу. Вилучивши те, що "виправлено" (заткніть), lol. У мене ще не було можливості повністю перевірити це.

20

Щоб включити необов'язковий знак мінус і заборонити такі цифри, як 015(що можна помилково прийняти за вісімкові числа), напишіть:

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

Це дозволяє альфа перед десятковою для мене. Дозволяє X.25
BengalTigger

1
Це не обмежує кількість десяткових знаків до 2.
Dawood ibn Kareem

13

Для номерів, у яких немає роздільника тисяч, мені подобається цей простий, компактний регулярний вираз:

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

або, не обмежуючись точністю 2:

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

Останній відповідає
1
100
100.
100,74
100,7
0,7
.7
.72

І вона не відповідає порожній рядку (як, наприклад, \ d *.? \ D *)



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

Зроблять такі речі, як 12.прийняті. Це не є загальноприйнятим, але якщо у випадку, якщо вам потрібно бути “гнучким”, це єдиний шлях. І звичайно [0-9]можна замінити \d, але я думаю, що це читабельніше.


5

Спробуйте це

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

Це дозволить також позитивні та негативні ознаки.


3

Основна відповідь - WRONG, оскільки вона дійсна 5.або5, входи

цей код обробляє його (але в моєму прикладі негативні цифри заборонені):

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

результати наведені нижче:

true => "0" / true => "0,00" / true => "0.0" / true => "0,00" / true => "0,0" / true => "1,2" true => "1.1" / true => "1" / true => "100" true => "100.00" / true => "100.0" / true => "1,11" / true => "1,11" / false => "-5" / false => "-0.00" / true => "101" / false => "0.00.0" / true => "0.000" / true => "000.25" / false => ".25" / true => "100.01" / true => "100.2" / true => "00" / false => "5." / false => "6", / true => "82" / true => "81,3" / true => "



2

Загалом, тобто необмежені десяткові знаки:

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



1

додавши свою відповідь теж, хтось може вважати її корисною, або може бути і моєю.

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


alert(getInteger('-11.11'));

1

Це працювало зі мною:

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

Група 1 - це ваше число з поплавком, а група 2 - лише дробом.


1

Я спробував один зі своїм проектом. Це дозволяє також цифри зі + | -знаками.

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

0

Chrome 56 не приймає подібних шаблонів (Chrome 56 приймає додаткові 11.11.) З номером типу, використовуйте тип тексту як прогрес.


0

Це дозволить десяткові з експоненцією та до 2 цифр,

^[+-]?\d+(\.\d{2}([eE](-[1-9]([0-9]*)?|[+]?\d+))?)?$

Демо


Це не відповідає цілому чи ні1.2e-10
Toto

Так, дякую за виправлення. Я думав, що це лише для десяткових чисел
Nambi_0915,

([0-9]+)?краще писати \d*. Тепер це не відповідає 10e3. І ОП хоче співставити до двох цифр.
Тото

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

Функція перевірить будь-яке десяткове число погодне число, має десяткові знаки чи ні, воно скаже "Правильне число", інше "Будь ласка, введіть у текстове поле лише кількість". надійде повідомлення попередження.

Дякую... :)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.