I need a regex suitable for c# that'll validate a number if it matches:
$1,000,000.150 $10000000.199 $10000 1,000,000.150 100000.123 10000
or the negative equivalents
Anyone able to help?
I need a regex suitable for c# that'll validate a number if it matches:
$1,000,000.150 $10000000.199 $10000 1,000,000.150 100000.123 10000
or the negative equivalents
Anyone able to help?
Try this one. It may need some fine tuning to only allow for a single decimal point, but it does match your test cases. I hope this helps.
[$\d,.]+
Why bother with Regex?
float num;
bool isValid = float.TryParse(str,
NumberStyles.Currency,
CultureInfo.GetCultureInfo("en-US"), // cached
out num);
You can use csmba's regex if you make one slight modification to it.
^\$?(\d{1,3},?(\d{3},?)*\d{3}(.\d{0,3})?|\d{1,3}(.\d{2})?)$
I think ssg is right. It's not a really good use of Regex, especially if your software has to deal with non-US centric data entry.
For instance, if the currency symbol is the Euro, or the Japanese Yen or the British Pound any of the other dozen currency symbols out there?
What about number formatting rules?
In the US you would enter 1,000,000.00
but in France, this should be 1.000.000,00
. Other countries allow spacing between digit-grouping...
If you use a straight Regex without taking the Culture into account, then you're never going to validate successfully unless you're 100% sure your software will never ever be used in a non-US centric context.
Be careful with floats. Eventually you will hit a case such as 0.01 represented as 0.00999999. Strings or integers are better to use.