使用货币符号验证号码

时间:2014-07-28 09:32:13

标签: c# .net regex

我有一个代表货币值的网格,包括符号。

用户可以编辑将在after_edit事件中更新的字段。

我正在尝试验证用户输入以仅接受有效输入。我不能使用普通的正则表达式来验证数字@"^\d{9}$",因为它包含符号。

我查看了关于Regular expression to remove any currency symbol from a string?的这个问题,但没有帮助。

如果输入是" $ 2ss50.00"它匹配并返回2.

如果仅使用$250.00£24.50等输入,我可以进行更新...因为网格值是使用value.ToString("c2",culture);设置的

2 个答案:

答案 0 :(得分:4)

如果您了解文化,可以在C#中完成此操作:

float value;
var culture = CultureInfo.GetCultureInfo("en-GB");
bool isValidCurrency = float.TryParse(str, NumberStyles.Currency, culture, out value);

答案 1 :(得分:2)

\p{Sc}匹配.NET中的Unicode类别“货币符号”(任何货币符号)中的字符以及Perl,PCRE,Ruby和Java。

使用此:

^\p{Sc}?[0-9]+\.[0-9]{2}$

如果小数是可选的,请将其设为:

^\p{Sc}?[0-9]+(?:\.[0-9]{2})?$

<强>解释

  • ^锚点断言我们位于字符串的开头
  • \p{Sc}?匹配可选的货币符号。
  • [0-9]+匹配一个或多个ASCII数字
  • \.匹配小数点
  • [0-9]{2}匹配小数
  • $锚点断言我们位于字符串的末尾