Regex for numbers only

C#Regex

C# Problem Overview


I haven't used regular expressions at all, so I'm having difficulty troubleshooting. I want the regex to match only when the contained string is all numbers; but with the two examples below it is matching a string that contains all numbers plus an equals sign like "1234=4321". I'm sure there's a way to change this behavior, but as I said, I've never really done much with regular expressions.

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

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

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

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

In case it matters, I'm using C# and .NET2.0.

C# Solutions


Solution 1 - C#

Use the beginning and end anchors.

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

Use "^\d+$" if you need to match more than one digit.


Note that "\d" will match [0-9] and other digit characters like the Eastern Arabic numerals ٠١٢٣٤٥٦٧٨٩. Use "^[0-9]+$" to restrict matches to just the Arabic numerals 0 - 9.


If you need to include any numeric representations other than just digits (like decimal values for starters), then see @tchrist's comprehensive guide to parsing numbers with regular expressions.

Solution 2 - C#

Your regex will match anything that contains a number, you want to use anchors to match the whole string and then match one or more numbers:

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

The ^ will anchor the beginning of the string, the $ will anchor the end of the string, and the + will match one or more of what precedes it (a number in this case).

Solution 3 - C#

If you need to tolerate decimal point and thousand marker

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

You will need a "-", if the number can go negative.

Solution 4 - C#

It is matching because it is finding "a match" not a match of the full string. You can fix this by changing your regexp to specifically look for the beginning and end of the string.

^\d+$

Solution 5 - C#

This works with integers and decimal numbers. It doesn't match if the number has the coma thousand separator ,

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

some strings that matches with this:

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

some strings that doesn't:

hello
9bye
hello9bye
888,323
5,434.3
-8,336.09
87078.

Solution 6 - C#

Perhaps my method will help you.

    public static bool IsNumber(string s)
    {
        return s.All(char.IsDigit);
    }

Solution 7 - C#

If you need to check if all the digits are number (0-9) or not,

^[0-9]+$

Matches

1425
0142
0
1

And does not match

154a25
1234=3254

Solution 8 - C#

Sorry for ugly formatting. For any number of digits:

[0-9]*

For one or more digit:

[0-9]+

Solution 9 - C#

^\d+$, which is "start of string", "1 or more digits", "end of string" in English.

Solution 10 - C#

Here is my working one:

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

And some tests

Positive tests:

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

Negative tests:

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

Checked not only for C#, but also with Java, Javascript and PHP

Solution 11 - C#

Use beginning and end anchors.

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

Use "^\d+$" if you need to match more than one digit.

Solution 12 - C#

While non of the above solutions was fitting my purpose, this worked for me.

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

Example of valid values:

"3",
"-3",
"0",
"0.0",
"1.0",
"0.7",
"690.7",
"0.0001",
"-555",
"945465464654"

Example of not valid values:

"a",
"",
" ",
".",
"-",
"001",
"00.2",
"000.5",
".3",
"3.",
" -1",
"--1",
"-.1",
"-0",
"00099",
"099"

Solution 13 - C#

Another way: If you like to match international numbers such as Persian or Arabic, so you can use following expression:

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

To match literal period character use:

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

Solution 14 - C#

Regex for integer and floating point numbers:

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

A number can start with a period (without leading digits(s)), and a number can end with a period (without trailing digits(s)). Above regex will recognize both as correct numbers.

A . (period) itself without any digits is not a correct number. That's why we need two regex parts there (separated with a "|").

Hope this helps.

Solution 15 - C#

I think that this one is the simplest one and it accepts European and USA way of writing numbers e.g. USA 10,555.12 European 10.555,12 Also this one does not allow several commas or dots one after each other e.g. 10..22 or 10,.22 In addition to this numbers like .55 or ,55 would pass. This may be handy.

^([,|.]?[0-9])+$

Solution 16 - C#

 console.log(/^(0|[1-9][0-9]*)$/.test(3000)) // true

Solution 17 - C#

If you want to extract only numbers from a string the pattern "\d+" should help.

Solution 18 - C#

The following regex accepts only numbers (also floating point) in both English and Arabic (Persian) languages (just like Windows calculator):

^((([0\u0660\u06F0]|([1-9\u0661-\u0669\u06F1-\u06F9][0\u0660\u06F0]*?)+)(\.)[0-9\u0660-\u0669\u06F0-\u06F9]+)|(([0\u0660\u06F0]?|([1-9\u0661-\u0669\u06F1-\u06F9][0\u0660\u06F0]*?)+))|\b)$

The above regex accepts the following patterns:

11
1.2
0.3
۱۲
۱.۳
۰.۲
۲.۷

The above regex doesn't accept the following patterns:

3.
.3
0..3
.۱۲

Solution 19 - C#

To check string is uint, ulong or contains only digits one .(dot) and digits Sample inputs

Regex rx = new Regex(@"^([1-9]\d*(\.)\d*|0?(\.)\d*[1-9]\d*|[1-9]\d*)$");
string text = "12.0";
var result = rx.IsMatch(text);
Console.WriteLine(result);

Samples

123 => True
123.1 => True
0.123 => True
.123 => True
0.2 => True
3452.434.43=> False
2342f43.34 => False
svasad.324 => False
3215.afa => False

Solution 20 - C#

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionTimothy CarterView Question on Stackoverflow
Solution 1 - C#Bill the LizardView Answer on Stackoverflow
Solution 2 - C#Robert GambleView Answer on Stackoverflow
Solution 3 - C#Andrew ChaaView Answer on Stackoverflow
Solution 4 - C#kasperjjView Answer on Stackoverflow
Solution 5 - C#ultraklonView Answer on Stackoverflow
Solution 6 - C#Rezo MegrelidzeView Answer on Stackoverflow
Solution 7 - C#Ujjal Suttra DharView Answer on Stackoverflow
Solution 8 - C#fnc12View Answer on Stackoverflow
Solution 9 - C#Mark BrackettView Answer on Stackoverflow
Solution 10 - C#MarinaView Answer on Stackoverflow
Solution 11 - C#lipika chakrabortyView Answer on Stackoverflow
Solution 12 - C#Daniele D.View Answer on Stackoverflow
Solution 13 - C#S.M.MousaviView Answer on Stackoverflow
Solution 14 - C#TagarView Answer on Stackoverflow
Solution 15 - C#AzurView Answer on Stackoverflow
Solution 16 - C#Chathuranga KasthuriarachchiView Answer on Stackoverflow
Solution 17 - C#James SelvakumarView Answer on Stackoverflow
Solution 18 - C#ProgrammerView Answer on Stackoverflow
Solution 19 - C#Yawar AliView Answer on Stackoverflow
Solution 20 - C#Giri babu vuppulaView Answer on Stackoverflow