Регулярное выражение только для чисел
Я вообще не использовал регулярные выражения, поэтому у меня возникли трудности с устранением неполадок. Я хочу, чтобы регулярное выражение соответствовало только тогда, когда содержащаяся строка-это все числа; но с двумя примерами ниже он соответствует строке, которая содержит все числа плюс знак равенства, например "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
}
если это имеет значение, я использую C# и. NET2. 0.
17 ответов:
используйте якоря начала и конца.
Regex regex = new Regex(@"^\d$");использовать
"^\d+$"Если вам нужно сопоставить более одной цифры.
отметим, что
"\d"будет соответствовать[0-9]и другие цифровые символы, такие как восточные арабские цифры٠١٢٣٤٥٦٧٨٩. Используйте"^[0-9]+$"чтобы ограничить совпадения только арабскими цифрами 0-9.
Если вам нужно включить любые числовые представления, кроме просто цифр( например, десятичные значения для начала), то см. @tchrist ' s полное руководство по разбору чисел с регулярными выражениями.
ваше регулярное выражение будет соответствовать всему, что содержит число, вы хотите использовать якоря, чтобы соответствовать всей строке, а затем соответствовать одному или нескольким числам:
regex = new Regex("^[0-9]+$");The
^якорь начала строки$закрепит конец строки, и+будет соответствовать один или несколько из того, что предшествует ему (число в этом случае).
Если вам нужно терпеть десятичную точку и тысячный маркер
var regex = new Regex(@"^-?[0-9][0-9,\.]+$");вам понадобится" -", если число может пойти отрицательным.
он соответствует, потому что он находит "совпадение" не совпадение полной строки. Вы можете исправить это, изменив регулярное выражение, чтобы специально искать начало и конец строки.
^\d+$
возможно, мой метод поможет вам.
public static bool IsNumber(string s) { return s.All(char.IsDigit); }
это работает с целыми числами и десятичными числами. Он не совпадает, если число имеет разделитель coma thousand,
"^-?\d*(\.\d+)?$"некоторые строки, которые соответствуют этому:
894 923.21 76876876 .32 -894 -923.21 -76876876 -.32некоторые строки, что не так:
hello 9bye hello9bye 888,323 5,434.3 -8,336.09 87078.
вот мой рабочий:
^(-?[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"};проверено не только на C#, но и на Java, Javascript и PHP
извините за безобразное форматирование. Для любого количества цифр:
[0-9]*для одной или нескольких цифр:
[0-9]+
Если вам нужно проверить, являются ли все цифры числом (0-9) или нет,
^[0-9]+$1425 TRUE
0142 TRUE
0 TRUE
1 TRUE
154a25 ложные
1234=3254 FALSE
другой способ: Если вы хотите, чтобы соответствовать международные номера, такие как персидский или арабский, так что вы можете использовать следующее выражение:
Regex = new Regex(@"^[\p{N}]+$");чтобы соответствовать буквальному символу периода, используйте:
Regex = new Regex(@"^[\p{N}\.]+$");
используйте начальные и конечные якоря.
Regex regex = new Regex(@"^\d$"); Use "^\d+$" if you need to match more than one digit.
в то время как ни одно из вышеперечисленных решений не соответствовало моей цели, это сработало для меня.
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", ".Три", "3.", "-1", "--1", - ... Один", "-0", "00099", "099"
Я думаю, что этот самый простой, и он принимает Европейский и американский способ написания чисел, например, США 10,555. 12 European 10.555, 12 Также это не позволяет несколько запятых или точек, один за другим, например, 10..22 или 10.Двадцать два В дополнение к этому цифры любят .55 или 55 пройдет. Это может быть удобно.
^([,|.]?[0-9])+$
регулярное выражение для целых и флотационных чисел точек:
^[+-]?\d*\.\d+$|^[+-]?\d+(\.\d*)?$число может начинаться с точки (без ведущих цифр)), и число может заканчиваться точкой(без конечных цифр). Выше регулярное выражение распознает оба как правильные числа. Один. (точка) сама по себе без каких-либо цифр не является правильным числом. Вот почему нам нужны две части регулярных выражений (разделенные символом "|").
надеюсь, что это помогает.
Comments