@OrangeDog, ваш оригинал больше, чем можно было бы ожидать. например 'cow3.45tornado';)
С. Альбано,
39
Он также соответствует одной точке, которая не является допустимым десятичным числом. Лучшим регулярным выражением было /^\d*\.?\d+$/бы принудительное введение цифры после десятичной точки.
Чандраншу
2
@Chandranshu, и он соответствует пустой строке, которую также решит ваше изменение.
OGHaza
2
@Chandranshu "не требует цифры после десятичной дроби"
OrangeDog
3
Это решение не работает. Он требует десятичных знаков, в то время как OP четко говорит: необязательные десятичные знаки.
Alex G
113
/\d+\.?\d*/
Одна или несколько цифр ( \d+), необязательная точка ( \.?), ноль или несколько цифр ( \d*).
В зависимости от вашего использования или механизма регулярных выражений вам может потребоваться добавить якоря начальной / конечной строки:
Да, но ответ, получивший наибольшее количество голосов, неверен, он соответствует как .пустой строке, так и.
OrangeDog
1
@Gangnus Также здесь не сказано, что ".digit" должен быть сопоставлен. Если они этого хотели, то должны были сказать.
OrangeDog
2
@EqualityInTech Я почти уверен, что это не так - в нем вообще нет группировки.
OrangeDog
1
Хм ... Думаю, я не совсем понимаю злые регулярные выражения, как я думал. Сожалею.
JDB все еще помнит Монику
1
@AlexanderRyanBaggett это точно соответствует указанному вопросу. Как видите, он вообще не включает -.
OrangeDog
74
Для правильного выполнения вам потребуется регулярное выражение, подобное приведенному ниже:
/^[+-]?((\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)
Например, он будет соответствовать:
123
23,45
34.
+0,45
-123
-273,15
-42.
-,45
+516
+9,8
+2.
+.5
И отвергнем эти не числа:
. (одна десятичная точка)
-. (отрицательная десятичная точка)
+. (плюс десятичная точка)
(пустая строка)
Более простые решения могут ошибочно отклонять действительные числа или сопоставлять эти не числа.
Лучше всего, потому что соответствует числу, за которым следует точка (42.). Однако есть ошибка / ложное срабатывание, поскольку оно соответствует этому: 3 .... 3, что можно исправить, добавив еще две круглые скобки для принудительного применения начального и конечного символов ^ $: / ^ ([+ -]? (\ D + (\ . \ d *)?) | (\. \ d +)) $ /
Пит Элвин
1
Спасибо, Пит, хорошо замеченный. Теперь ответ был исправлен, добавлены дополнительные скобки, чтобы он работал так, как задумано. Сейчас написано вроде ^A?(B|C)$. Раньше было написано, ^A?B|C$что на самом деле значит (^A?B)|(C$)что было неверно. Примечание: ^(A?B|C)$также неверно, потому что фактически означает, ^((A?B)|(C))$что не соответствует "+.5".
Hoylen 07
2
Это лучший ответ. Другие ответы не относятся ко всем случаям. Я сам делаю то же самое, за исключением того, что использую опережающий просмотр для обработки случаев пропущенных цифр: /^[+-pting?(?=\d|\.\d)\d*(\.\d*)?$ /
PhilHarvey
1
Это единственное правильное регулярное выражение здесь. Но некоторые люди не согласятся с «34». Я хотел бы предложить + после второй г вместо *
Гангнус
1
Это также соответствует 0000.2, что, вероятно, не то, что нужно.
Аарон Зорел 08
12
Попробуйте это регулярное выражение:
\d+\.?\d*
\ d + цифры перед необязательной десятичной дробью
.? необязательный десятичный знак (необязательный из-за квантификатора?)
\ d * необязательные цифры после десятичного числа
Спасибо за замечание. Изменено мое регулярное выражение.
Kash
4
Действительно, но теперь вы просто отредактировали его в том, что уже опубликовано кем-то другим. Попробуйте просто удалить еще один «правильный» ответ.
Барт Кирс,
@BartKiers Я поддержал это, потому что ответ, о котором вы говорите, имеет дополнительную косую черту в начале, поэтому у меня это не сработало. Это сработало.
Эдисон
@Edison, что косая черта является разделителем регулярных выражений: не является частью самого шаблона. Вы увидите множество ответов, содержащих эти разделители.
Барт Кирс
10
Я считаю, что это лучший вариант, потому что он соответствует всем требованиям:
Для меня это лучший ответ, так как строка: «4». (например) не является допустимым числом, по крайней мере, на рубиновом языке. Тем не менее, самые популярные ответы принимают «4». как регулярное выражение числа, что неверно.
должно отражать то, что люди обычно считают правильно сформированным десятичным числом.
Цифры перед десятичной точкой могут быть как одной цифрой, в этом случае это может быть от 0 до 9, так и более чем одной цифрой, и в этом случае она не может начинаться с 0.
Если перед десятичным знаком есть какие-либо цифры, то десятичное число и следующие за ним цифры необязательны. В противном случае должен присутствовать десятичный разделитель, за которым следует хотя бы одна цифра. Обратите внимание, что после десятичной точки допускается несколько завершающих нулей.
Придумал это. Позволяет использовать как целые, так и десятичные числа, но принудительно использовать полное десятичное число (начальные и конечные числа), если вы решили ввести десятичное число.
На ваш вопрос уже дан ответ, так что это просто дополнительная информация для тех, кто хочет только 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: нет совпадения
@AlexanderRyanBaggett, вам нужно проверить наличие отрицательного знака, это будет: ^ -? \ D + (\. \ D {2})? $
PersyJack
0
В Perl используйте Regexp :: Common, который позволит вам собрать точно настроенное регулярное выражение для вашего конкретного числового формата. Если вы не используете Perl, сгенерированное регулярное выражение обычно может использоваться другими языками.
Печать результата генерации примера регулярных выражений в Regexp :: Common :: Number:
Ответы:
Используйте следующее:
^
- Начало строки;\d*
- 0 и более цифр;\.?
- Необязательная точка (экранированная, потому что в регулярном выражении.
это специальный символ);\d*
- 0 и более цифр (десятичная часть);$
- Конец строки.Это позволяет использовать десятичную дробь .5 вместо того, чтобы требовать начальный ноль, например 0,5.
источник
/^\d*\.?\d+$/
бы принудительное введение цифры после десятичной точки.Одна или несколько цифр (
\d+
), необязательная точка (\.?
), ноль или несколько цифр (\d*
).В зависимости от вашего использования или механизма регулярных выражений вам может потребоваться добавить якоря начальной / конечной строки:
Демо Debuggex
источник
.
пустой строке, так и.-
.Для правильного выполнения вам потребуется регулярное выражение, подобное приведенному ниже:
То же выражение с пробелами, с использованием расширенного модификатора (поддерживаемого Perl):
или с комментариями:
Например, он будет соответствовать:
И отвергнем эти не числа:
Более простые решения могут ошибочно отклонять действительные числа или сопоставлять эти не числа.
источник
^A?(B|C)$
. Раньше было написано,^A?B|C$
что на самом деле значит(^A?B)|(C$)
что было неверно. Примечание:^(A?B|C)$
также неверно, потому что фактически означает,^((A?B)|(C))$
что не соответствует "+.5".Попробуйте это регулярное выражение:
источник
123.
Я считаю, что это лучший вариант, потому что он соответствует всем требованиям:
источник
В итоге я использовал следующее:
Это делает недействительным следующее:
источник
.3
вы можете использовать это:
матчей:
11
11.1
0.2
не совпадает:
.2
2.
2.6.9
источник
Какой язык? В стиле Perl:
^\d+(\.\d*)?$
источник
Вот что я сделал. Это строже, чем любой из вышеперечисленных (и более правильный):
Строки, которые проходят:
Строки, которые не работают:
источник
должно отражать то, что люди обычно считают правильно сформированным десятичным числом.
Цифры перед десятичной точкой могут быть как одной цифрой, в этом случае это может быть от 0 до 9, так и более чем одной цифрой, и в этом случае она не может начинаться с 0.
Если перед десятичным знаком есть какие-либо цифры, то десятичное число и следующие за ним цифры необязательны. В противном случае должен присутствовать десятичный разделитель, за которым следует хотя бы одна цифра. Обратите внимание, что после десятичной точки допускается несколько завершающих нулей.
правильно соответствует следующему:
а также их подписанные эквиваленты, тогда как он отвергает следующее:
и их эквиваленты со знаком, а также пустая строка.
источник
чисто и просто.
Это использует суффикс и префикс, функции RegEx.
Он напрямую возвращает true - false для условия IsMatch
источник
Придумал это. Позволяет использовать как целые, так и десятичные числа, но принудительно использовать полное десятичное число (начальные и конечные числа), если вы решили ввести десятичное число.
источник
На ваш вопрос уже дан ответ, так что это просто дополнительная информация для тех, кто хочет только 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 :: Common :: Number:
источник
попробуй это.
^[0-9]\d{0,9}(\.\d{1,3})?%?$
у меня он протестирован и работал.источник