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.
Ответы
Ответ 1
Используйте начальные и конечные привязки.
Regex regex = new Regex(@"^\d$");
Используйте "^\d+$"
, если вам нужно сопоставить более одной цифры.
Обратите внимание, что "\d"
будет соответствовать [0-9]
и другим цифровым символам, таким как восточно-арабские цифры ٠١٢٣٤٥٦٧٨٩
. Используйте "^[0-9]+$"
для ограничения совпадений только арабскими цифрами 0 - 9.
Если вам нужно включить любые числовые представления, отличные от цифр (например, десятичные значения для стартеров), см. @tchrist подробное руководство по анализу чисел с регулярными выражениями.
Ответ 2
Ваше регулярное выражение будет соответствовать всем, что содержит число, вы хотите использовать привязки для соответствия всей строке, а затем соответствуют одному или нескольким номерам:
regex = new Regex("^[0-9]+$");
^
будет привязывать начало строки, $
будет привязывать конец строки, а +
будет соответствовать одному или нескольким из предшествующих (число в этом случае).
Ответ 3
если вам нужно переносить десятичную точку и тысячу маркеров...
var regex = new Regex(@"^-*[0-9,\.]+$");
update: вам понадобится "-" , если число может пойти отрицательным.
обновление: перемещено "-" в начало, чтобы избежать совпадения не запускающихся "-"
Ответ 4
Это совпадение, потому что находит "совпадение" не совпадением полной строки. Вы можете исправить это, изменив ваше регулярное выражение, чтобы, в частности, искать начало и конец строки.
^\d+$
Ответ 5
^\d + $, который является "началом строки", "1 или более цифр", "конец строки" на английском языке.
Ответ 6
Возможно, мой метод поможет вам.
public static bool IsNumber(string s)
{
return s.All(char.IsDigit);
}
Ответ 7
Это работает с целыми числами и десятичными числами. Он не совпадает, если число имеет разделитель 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.
Ответ 8
Извините за уродливое форматирование.
Для любого количества цифр:
[0-9]*
Для одной или нескольких цифр:
[0-9]+
Ответ 9
Вот мой рабочий:
^(-?[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
Ответ 10
Если вам нужно проверить, являются ли все цифры цифрами (0-9) или нет,
^[0-9]+$
1425 ИСТИНА
0142 ИСТИНА
0 ИСТИНА
1 ИСТИНА
154a25 FALSE
1234 = 3254 ЛОЖЬ
Ответ 11
Другой способ: если вам нравится сопоставлять международные номера, такие как персидский или арабский, вы можете использовать следующее выражение:
Regex = new Regex(@"^[\p{N}]+$");
Для сопоставления буквенного периода используйте:
Regex = new Regex(@"^[\p{N}\.]+$");
Ответ 12
используйте начальные и конечные привязки.
Regex regex = new Regex(@"^\d$");
Use "^\d+$" if you need to match more than one digit.
Ответ 13
В то время как не указанные выше решения не соответствовали моей цели, это сработало для меня.
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"
Ответ 14
Если вы хотите извлечь только цифры из строки, вам поможет шаблон "\ d +".
Ответ 15
Regex для целых чисел и чисел флотирования:
^[+-]?\d*\.\d+$|^[+-]?\d+(\.\d*)?$
Число может начинаться с периода (без ведущих цифр (цифр)),
и число может заканчиваться периодом (без конечных цифр (цифр)).
Выше регулярное выражение распознает как правильные числа.
A. (период) без каких-либо цифр не является правильным числом.
Вот почему нам нужны две регулярные части (разделенные "|" ).
Надеюсь, что это поможет.
Ответ 16
Я думаю, что это один из самых простых, и он принимает европейский и американский способ написания чисел, например. США 10 555,12 евро 10,555,12
Также это не позволяет нескольким запятым или точкам один за другим, например. 10..22 или 10,.22
В дополнение к этим номерам, как .55 или, 55, пройдет. Это может быть удобно.
^([,|.]?[0-9])+$
Ответ 17
Regex regex = new Regex ( "^ [0-9] {1,4} = [0-9] {1,4] $" )