我有一个代表货币值的网格,包括符号。
用户可以编辑将在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);
设置的
答案 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}
匹配小数$
锚点断言我们位于字符串的末尾