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


89

Как мне сопоставить отрицательные числа с помощью этого регулярного выражения? Это регулярное выражение отлично работает с положительными значениями, но я хочу, чтобы оно также допускало отрицательные значения, например -10, -125,5 и т. Д.

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

Благодарность


1
@DanPuzey Разве вы не видели опубликованное им регулярное выражение?
Nolonar


Я пробовал добавить [-] в начале, но это не сработало. Я также попробовал комбинацию небольших изменений
user1786107

попробуйте это ^ -? \ d + (\. \ d +)? $
Civa

@DanPuzey, ваши слова ничего не добавляют к обсуждению и являются недобрыми
Wassadamo

Ответы:


173

Вы должны добавить необязательный дефис в начале, добавив -?( ?является квантификатором, означающим одно или ноль вхождений ):

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

Я проверил это в Rubular со следующими значениями:

10.00
-10.00

и оба совпали, как ожидалось.


2
вы должны избежать точки, т.е.^-?[0-9]\d*(\.\d+)?$
Алекс Шестеров

14
Если есть потенциальная необходимость захвата явно положительных чисел (+10.00, используется в некоторых приложениях), вы можете использовать^[-+]?[0-9]\d*(\.\d+)?$
Cemafor

127

Некоторые примеры регулярных выражений:

Положительные целые числа :

^\d+$

Отрицательные целые числа :

^-\d+$

Целое число :

^-?\d+$

Положительное число :

^\d*\.?\d+$

Отрицательное число :

^-\d*\.?\d+$

Положительное или отрицательное число :

^-?\d*\.{0,1}\d+$

Телефон :

^\+?[\d\s]{3,}$

Телефон с кодом :

^\+?[\d\s]+\(?[\d\s]{10,}$

1900-2099 год :

^(19|20)[\d]{2,2}$

Дата (дд мм гггг, д / м / гггг и т. Д.):

^([1-9]|0[1-9]|[12][0-9]|3[01])\D([1-9]|0[1-9]|1[012])\D(19[0-9][0-9]|20[0-9][0-9])$

IP v4 :

^(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]){3}$

11

Я не знаю, зачем тебе это в первую очередь [0-9].

Пытаться:

^-?\d*(\.\d+)?$

Обновить

Если вы хотите быть уверены, что у вас будет цифра на месте единиц, используйте

^-?\d+(\.\d+)?$

1
Вероятно, просто чтобы гарантировать цифру на месте единиц, ^-?\d+(\.\d+)?$если это так , должно сработать
Cemafor

Самый удачный ответ. Я не думаю, что [0-9] необходим, как показано в принятом ответе.
UzumakiL

3

ОБНОВЛЕНО (13.08.2014): это лучший код для положительных и отрицательных чисел =)

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

Я пробовал с этими числами и отлично работает:

-1234454.3435
-98.99
-12.9
-12.34
-10.001
-3
-0.001
-000
-0.00
0
0.00
00000001.1
0.01
1201.0000001
1234454.3435
7638.98701

Измените -*на, -?потому что он совпадает -------------.
Toto

Я внес несколько дополнительных изменений, и теперь работает нормально. Пожалуйста, проверьте это =)
Pacho Zuñiga

1

Это позволит использовать символ -или +только тогда, когда за ним следует число:

 ^([+-](?=\.?\d))?(\d+)?(\.\d+)?$

1

Это позволит как положительные, так и отрицательные целые числа

ValidationExpression = "^ -? [0-9] \ d * (\ d +)? $"


1

У меня есть несколько экспериментов с регулярным выражением в URL-адресе django, которые требовали от отрицательных до положительных чисел

^(?P<pid>(\-\d+|\d+))$

Давайте сосредоточимся на этой (\-\d+|\d+)части и проигнорируем другие, эта точка с запятой |означает ИЛИ в регулярном выражении, тогда отрицательное значение будет соответствовать этой \-\d+части, а положительное значение - этому.\d+






0

Регулярное выражение для числа, необязательная десятичная точка, необязательно отрицательное значение:

^-?(\d*\.)?\d+$;

работает для отрицательного целого, десятичного, отрицательного с десятичным


0
^(-?\d+\.)?-?\d+$

позволять:

23425.23425
10.10
100
0
0.00
-100
-10.10
10.-10
-10.-10
-23425.23425
-23425.-23425
0.234

0

Если у вас есть это, val="-12XXX.0abc23"и вы хотите извлечь только десятичное число, в этом случае это regex ( ^-?[0-9]\d*(\.\d+)?$) не поможет вам в этом.
это правильный код с правильным регулярным выражением обнаружения:

var val="-12XXX.0abc23";
val = val.replace(/^\.|[^-?\d\.]|\.(?=.*\.)|^0+(?=\d)/g, '');
console.log(val);

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.