Відповіді:
Використовуйте наступне:
/^\d*\.?\d*$/
^ - Початок рядка;\d* - 0 і більше цифр;\.?- необов'язкова точка (втекла, тому що в регулярному вираженні .є особливим символом);\d* - 0 або більше цифр (десяткова частина);$ - Кінець лінії.Це дозволяє використовувати
/^\d*\.?\d+$/яке змусило би цифру після десяткової крапки.
/\d+\.?\d*/
Одна або кілька цифр ( \d+), необов'язковий період ( \.?), нуль або більше цифр ( \d*).
Залежно від двигуна використання або регулярного вибору, вам може знадобитися додати початкові / кінцеві рядки:
/^\d+\.?\d*$/

.і порожній рядку.
-.
Для правильного його виконання потрібен регулярний вираз на зразок наступного:
/^[+-]?((\d+(\.\d*)?)|(\.\d+))$/
Те саме вираження з пробілом, використовуючи розширений модифікатор (як підтримується Perl):
/^ [+-]? ( (\d+ (\.\d*)?) | (\.\d+) ) $/x
або з коментарями:
/^ # Beginning of string
[+-]? # Optional plus or minus character
( # Followed by either:
( # Start of first option
\d+ # One or more digits
(\.\d*)? # Optionally followed by: one decimal point and zero or more digits
) # End of first option
| # or
(\.\d+) # One decimal point followed by one or more digits
) # End of grouping of the OR options
$ # End of string (i.e. no extra characters remaining)
/x # Extended modifier (allows whitespace & comments in regular expression)
Наприклад, він буде відповідати:
І відкине ці неномери:
Простіші рішення можуть неправильно відхилити дійсні числа або співставити ці неномери.
^A?(B|C)$. Раніше писалося так, ^A?B|C$що насправді означає, (^A?B)|(C$)що було неправильно. Примітка: ^(A?B|C)$також невірно, оскільки це насправді означає, ^((A?B)|(C))$що не відповідатиме "+.5".
Спробуйте цей регулярний вираз:
\d+\.?\d*
\ d + цифри перед необов'язковим десятковим
.? необов'язковий десятковий (необов’язковий через? квантор)
\ d * необов'язкові цифри після десяткових
123.
Я думаю, що це найкраще, оскільки воно відповідає всім вимогам:
^\d+(\\.\d+)?$
Я в кінцевому рахунку використовував наступне:
^\d*\.?\d+$
Це робить такі недійсними:
.
3.
.3
Ви можете скористатися цим:
^\d+(\.\d)?\d*$
матчі:
11
11,1
0,2
не відповідає:
.2
2.
2.6.9
Це я і зробив. Це більш суворо, ніж будь-яке з перерахованих вище (і правильніше, ніж деякі):
^0$|^[1-9]\d*$|^\.\d+$|^0\.\d*$|^[1-9]\d*\.\d*$
Рядки, що проходять:
0
0.
1
123
123.
123.4
.0
.0123
.123
0.123
1.234
12.34
Рядки, які не вдається:
.
00000
01
.0.
..
00.123
02.134
^[+-]?(([1-9][0-9]*)?[0-9](\.[0-9]*)?|\.[0-9]+)$
має відображати те, що люди зазвичай вважають добре сформованим десятковим числом.
Цифри перед десятковою комою можуть бути або однією цифрою, і в цьому випадку це може бути від 0 до 9, або більше однієї цифри, і в цьому випадку вона не може починатися з 0.
Якщо перед десятковим знаком є будь-які цифри, то десяткові та наступні за ним цифри необов’язкові. В іншому випадку має бути десятковою особою, що супроводжується принаймні однією цифрою. Зауважте, що після десяткової крапки дозволено кілька знаків 0.
grep -E '^[+-]?(([1-9][0-9]*)?[0-9](\.[0-9]*)?|\.[0-9]+)$'
правильно відповідає наступному:
9
0
10
10.
0.
0.0
0.100
0.10
0.01
10.0
10.10
.0
.1
.00
.100
.001
а також їх підписані еквіваленти, тоді як він відкидає наступне:
.
00
01
00.0
01.3
та їх підписані еквіваленти, а також порожній рядок.
^\d+(()|(\.\d+)?)$
Придумав це. Дозволяє як цілі, так і десяткові, але примушує вводити повну десяткову (провідні та кінцеві числа), якщо ви вирішили ввести десятковий.
Те, що ви запитували, вже відповів, тому це лише додаткова інформація для тих, хто хоче лише 2 десяткових цифри, якщо вводиться необов'язковий десятковий знак:
^\d+(\.\d{2})?$
^: початок рядка
\ d: цифра (дорівнює [0-9])
+: один і необмежений раз
Захоплення групи (. \ D {2})?
? : нуль і один раз. : характер.
\ d: цифра (дорівнює [0-9])
{2}: рівно в 2 рази
$: кінець рядка
1: матч
123: матч
123.00: матч
123.: немає матчу
123 ..: немає матчу
123.0: немає матчу
123.000: немає матчу
123.00.00: немає відповідності
У Perl використовуйте Regexp :: Common, що дозволить вам зібрати чітко налаштований регулярний вираз для вашого конкретного формату числа. Якщо ви не використовуєте Perl, згенерований регулярний вираз все ще може використовуватися іншими мовами.
Друк результату генерації прикладних регулярних виразів у Regexp :: Загальний :: Число:
$ perl -MRegexp::Common=number -E 'say $RE{num}{int}'
(?:(?:[-+]?)(?:[0123456789]+))
$ perl -MRegexp::Common=number -E 'say $RE{num}{real}'
(?:(?i)(?:[-+]?)(?:(?=[.]?[0123456789])(?:[0123456789]*)(?:(?:[.])(?:[0123456789]{0,}))?)(?:(?:[E])(?:(?:[-+]?)(?:[0123456789]+))|))
$ perl -MRegexp::Common=number -E 'say $RE{num}{real}{-base=>16}'
(?:(?i)(?:[-+]?)(?:(?=[.]?[0123456789ABCDEF])(?:[0123456789ABCDEF]*)(?:(?:[.])(?:[0123456789ABCDEF]{0,}))?)(?:(?:[G])(?:(?:[-+]?)(?:[0123456789ABCDEF]+))|))
спробуйте це. ^[0-9]\d{0,9}(\.\d{1,3})?%?$це тестується і працює для мене.