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

89

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

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

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

user1786107
источник
1
@DanPuzey Разве вы не видели опубликованное им регулярное выражение?
Nolonar
regexper.com
Дэйв Биш
Я пробовал добавить [-] в начале, но это не сработало. Я также попробовал комбинацию небольших изменений
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}$
KF2
источник
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
Pacho Zuñiga
источник
Измените -*на, -?потому что он совпадает -------------.
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

Просто добавьте токен 0 или 1:

^-?[0-9]\d*(.\d+)?$
БэнксиСан
источник
Андре меня опередил, он тоже прав, жетон [0-9] не нужен.
BanksySan
0

Только для отрицательных чисел это идеально.

^-\d*\.?\d+$
Камлешкумар Гуджаратхи
источник
0
^[+-]?\d{1,18}(\.\d{1,2})?$

принимает положительные или отрицательные десятичные значения.

Дипак Тамбэ
источник
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);

Бэзил
источник