2013-04-04 4 views
46

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

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

Благодаря

+0

Вы пробовали что-нибудь? Кажется, это должно быть довольно простой проблемой ... –

+0

@DanPuzey Разве вы не видели сообщение Regex? – Nolonar

+0

http://www.regexper.com/ –

ответ

87

Вы должны добавить дополнительный дефис в начале путем добавления -? (? это quantifier означает один или ноль вхождений):

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

Я проверил его в Рублевом с этими значениями:

10.00 
-10.00 

и оба согласованы, как ожидалось.

+2

вам следует избегать точки, то есть '^ -? [0-9] \ d * (\. \ d +) ? $ ' –

+9

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

+1

Хороший ответ +1. –

77

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

Положительные Целые:

^\d+$ 

Негативные Целые:

^-\d+$ 

Целые:

^-?\d+$ 

Positive Номер:

^\d*\.?\d+$ 

Negative Номер:

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

Положительный номер или номер на негативе:

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

Телефон:

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

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

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

Год 1900-2099:

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

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

^([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}$ 
8

Я не знаю, почему вам нужно, что первый [0-9].

Try:

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

Update

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

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

Возможно, чтобы гарантировать цифру в одном месте, '^ -? \ D + (\. \ D +)? $' Должен работать, если это так. – Cemafor

+0

@Cemafor Действительно, спасибо. Обновленный ответ –

0

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

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

Андре избил меня, он тоже прав, не нужен токен [0-9]. – BanksySan

1

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

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

ОБНОВЛЕНО (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 
+0

Измените '- *' на '-?', Потому что он соответствует '-------------'. – Toto

+0

Я внес некоторые дополнительные изменения и теперь отлично работает. Пожалуйста, проверьте, что =) –

1

этого Wi будете допускать как положительные, так и отрицательные целые числа

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

1

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

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

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

0

Только для отрицательного номера это идеальное решение.

^-\d*\.?\d+$ 
-1
^[+-]?\d{1,18}(\.\d{1,2})?$ 

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

0

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

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

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

Смежные вопросы