Regex только для чисел

Я вообще не использовал регулярные выражения, поэтому у меня возникли проблемы с поиском и устранением неисправностей. Я хочу, чтобы регулярное выражение соответствовало только тогда, когда строка содержала все числа; но с двумя приведенными ниже примерами он соответствует строке, содержащей все числа плюс знак равенства, такой как "1234 = 4321". Я уверен, что есть способ изменить это поведение, но, как я уже сказал, я никогда не делал многого с регулярными выражениями.

string compare = "1234=4321";
Regex regex = new Regex(@"[\d]");

if (regex.IsMatch(compare))
{ 
    //true
}

regex = new Regex("[0-9]");

if (regex.IsMatch(compare))
{ 
    //true
}

В случае, если это имеет значение, я использую С# и .NET2.0.

+214
источник поделиться
17 ответов

Используйте начальные и конечные привязки.

Regex regex = new Regex(@"^\d$");

Используйте "^\d+$", если вам нужно сопоставить более одной цифры.


Обратите внимание, что "\d" будет соответствовать [0-9] и другим цифровым символам, таким как восточно-арабские цифры ٠١٢٣٤٥٦٧٨٩. Используйте "^[0-9]+$" для ограничения совпадений только арабскими цифрами 0 - 9.


Если вам нужно включить любые числовые представления, отличные от цифр (например, десятичные значения для стартеров), см. @tchrist подробное руководство по анализу чисел с регулярными выражениями.

+367
источник

Ваше регулярное выражение будет соответствовать всем, что содержит число, вы хотите использовать привязки для соответствия всей строке, а затем соответствуют одному или нескольким номерам:

regex = new Regex("^[0-9]+$");

^ будет привязывать начало строки, $ будет привязывать конец строки, а + будет соответствовать одному или нескольким из предшествующих (число в этом случае).

+75
источник

если вам нужно переносить десятичную точку и тысячу маркеров...

var regex = new Regex(@"^-*[0-9,\.]+$");

update: вам понадобится "-" , если число может пойти отрицательным. обновление: перемещено "-" в начало, чтобы избежать совпадения не запускающихся "-"

+25
источник

Это совпадение, потому что находит "совпадение" не совпадением полной строки. Вы можете исправить это, изменив ваше регулярное выражение, чтобы, в частности, искать начало и конец строки.

^\d+$
+15
источник

^\d + $, который является "началом строки", "1 или более цифр", "конец строки" на английском языке.

+11
источник

Возможно, мой метод поможет вам.

    public static bool IsNumber(string s)
    {
        return s.All(char.IsDigit);
    }
+11
источник

Это работает с целыми числами и десятичными числами. Он не совпадает, если число имеет разделитель coma тысяч,

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

некоторые строки, соответствующие этому:

894
923.21
76876876
.32
-894
-923.21
-76876876
-.32

некоторые строки, которые не имеют значения:

hello
9bye
hello9bye
888,323
5,434.3
-8,336.09
87078.
+9
источник

Извините за уродливое форматирование. Для любого количества цифр:

[0-9]*

Для одной или нескольких цифр:

[0-9]+
+7
источник

Вот мой рабочий:

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

И некоторые тесты

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

string []goodNumbers={"3","-3","0","0.0","1.0","0.1","0.0001","-555","94549870965"};

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

string []badNums={"a",""," ","-","001","-00.2","000.5",".3","3."," -1","--1","-.1","-0"};

Проверено не только на С#, но также на Java, Javascript и PHP

+7
источник

Если вам нужно проверить, являются ли все цифры цифрами (0-9) или нет,

^[0-9]+$

1425 ИСТИНА

0142 ИСТИНА

0 ИСТИНА

1 ИСТИНА

154a25 FALSE

1234 = 3254 ЛОЖЬ

+6
источник

Другой способ: если вам нравится сопоставлять международные номера, такие как персидский или арабский, вы можете использовать следующее выражение:

Regex = new Regex(@"^[\p{N}]+$");

Для сопоставления буквенного периода используйте:

Regex = new Regex(@"^[\p{N}\.]+$");
+4
источник

используйте начальные и конечные привязки.

 Regex regex = new Regex(@"^\d$");
 Use "^\d+$" if you need to match more than one digit.
+3
источник

В то время как не указанные выше решения не соответствовали моей цели, это сработало для меня.

var pattern = @"^(-?[1-9]+\d*([.]\d+)?)$|^(-?0[.]\d*[1-9]+)$|^0$|^0.0$";
return Regex.Match(value, pattern, RegexOptions.IgnoreCase).Success;

Пример допустимых значений: "3", "-3", "0", "0.0", "1,0", "0,7", "690,7", "0,0001", "-555", "945465464654"

Пример недопустимых значений: "А", "," ", "," - "," 001 "," 00,2 "," 000,5 "," 0,3 "," 3." "-1 "," --1 "," ± 1 "," -0 "," 00099 "," 099"

+2
источник

Если вы хотите извлечь только цифры из строки, вам поможет шаблон "\ d +".

0
источник

Regex для целых чисел и чисел флотирования:

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

Число может начинаться с периода (без ведущих цифр (цифр)), и число может заканчиваться периодом (без конечных цифр (цифр)). Выше регулярное выражение распознает как правильные числа. A. (период) без каких-либо цифр не является правильным числом. Вот почему нам нужны две регулярные части (разделенные "|" ).

Надеюсь, что это поможет.

0
источник

Я думаю, что это один из самых простых, и он принимает европейский и американский способ написания чисел, например. США 10 555,12 евро 10,555,12 Также это не позволяет нескольким запятым или точкам один за другим, например. 10..22 или 10,.22 В дополнение к этим номерам, как .55 или, 55, пройдет. Это может быть удобно.

^([,|.]?[0-9])+$
0
источник

Regex regex = new Regex ( "^ [0-9] {1,4} = [0-9] {1,4] $" )

-1
источник

Посмотрите другие вопросы по меткам или Задайте вопрос