validator - regular expression validation in c#

Regex for numbers only (12)

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))

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

if (regex.IsMatch(compare))

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

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}\.]+$");

Here is my working one:


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

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


1425 TRUE

0142 TRUE



154a25 FALSE

1234=3254 FALSE

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.

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.


Perhaps my method will help you.

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

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

Sorry for ugly formatting. For any number of digits:


For one or more digit:


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.

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"

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

use beginning and end anchors.

 Regex regex = new Regex(@"^\d$");
 Use "^\d+$" if you need to match more than one digit.