Регулярное выражение только для чисел



Я вообще не использовал регулярные выражения, поэтому у меня возникли трудности с устранением неполадок. Я хочу, чтобы регулярное выражение соответствовало только тогда, когда содержащаяся строка-это все числа; но с двумя примерами ниже он соответствует строке, которая содержит все числа плюс знак равенства, например "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.

1456   17  

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.

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

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

^(-?[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*)?$

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

надеюсь, что это помогает.

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

регулярное выражение регулярное выражение = новое регулярное выражение ("^[0-9]{1,4}=[0-9]{1,4]$")

Comments

    Ничего не найдено.