我需要检查这种格式;
1.234.567,89
条目只允许使用一个逗号。
当前代码
Regex.Match(((TextChangedEventArgs)e).NewTextValue, @"^[0-9]+(\,[0-9]+)?$");
我怎样才能做到这一点?
答案 0 :(得分:6)
您不应该使用正则表达式来检查字符串是否可以解析为decimal
/ double
。使用decimal.TryParse
(或double.TryParse
):
string moneyText = "1.234.567,89";
var myCulture = new CultureInfo("de-DE");
decimal money;
bool validFormat = decimal.TryParse(moneyText, NumberStyles.Currency, myCulture, out money);
if (validFormat)
Console.WriteLine("Valid format, parsed value was " + money.ToString("C"));
答案 1 :(得分:0)
使用正则表达式通过使用非捕获前瞻(?=
?!
)强制实现可能性,我们可以在匹配前强制执行所有规则 。
规则
这些模式已被评论,因此请使用选项IgnorePatternWhitespace
或删除评论并在一行上加入。
需要逗号
^
(?=[\d\.,]+\Z) # Only allow decimals a period or a comma.
(?=.*,) # Enforce that there is a comma ahead.
(?!.*\.\.) # Fail match if two periods are consecutive.
.+ # All rules satisfied, begin matching
$
逗号和以下值可选
^
(?=[\d\.,]+\Z) # Only allow decimals a period or a comma.
(?!.*\.\.) # Fail match if two periods are consecutive.
[\d.]+ # All rules satisfied, begin matching
(,\d+)? # If comma found, allow it but then only have decimals
$ # This ensures there are no more commas and match will fail.