Introduction
This article will give you a way to determine if a given string
has a valid number style (Integer
, Float
, Currency
, etc.) according to specified/current culture.
Background
In all VBScript and Visual Basic applications, there is a built-in function called IsNumeric
/ IsCurrency
, but in C# there is no built-in function with the same functionality.
I have investigated a little and found out that all given solutions always use try catch
to find out if the given string
value can be parsed.
That seemed like a good way to test it, BUT what if the number contains commas or a currency sign?
Then I have to add another check to this code and strip down the non numeric sign and test the result.
Here I present a simple way that is supported by C#.
The Solution
In the code shown below, I actually use a built-in functionality of C# to determine if a given string
value stands up to the requirements I want.
public bool isNumeric(string val, System.Globalization.NumberStyles NumberStyle)
{
Double result;
return Double.TryParse(val,NumberStyle,
System.Globalization.CultureInfo.CurrentCulture,out result);
}
The above function allow me to test if the given string
stands up to one or more of the following styles:
- Hex Number
- Number
- Currency
- Float
A more detailed list and explanation regarding System.Globalization.NumberStyles
can be found here.
Examples
If you want to test for an integer number, then do the following:
isNumeric("42000", System.Globalization.NumberStyles.Integer)
If you want to test for an integer number separated with commas, then do the following:
isNumeric("42,000", System.Globalization.NumberStyles.Integer |
System.Globalization.NumberStyles.AllowThousands)
Using Other Cultures
I use the current culture as shown in the code below.
A list of all available culture names can be obtained here.
public bool isNumeric
(string val, System.Globalization.NumberStyles NumberStyle, string CultureName)
{
Double result;
return Double.TryParse(val,NumberStyle,new System.Globalization.CultureInfo
(CultureName),out result);
}
There are many ways to approach this problem, I chose the one that suits beginner levels and does not involve any Regular Expression which requires a higher level of expertise.
If you are interested in a solution that involves Regular Expressions, please take a look at the following links:
Enjoy and tell me your findings.
History
- 7th March, 2006: Initial post