检查带有小数位的字符串,用逗号分隔 - C#

时间:2017-05-15 09:10:20

标签: c# regex

我需要检查这种格式;

  

1.234.567,89

条目只允许使用一个逗号。

当前代码

Regex.Match(((TextChangedEventArgs)e).NewTextValue, @"^[0-9]+(\,[0-9]+)?$");

我怎样才能做到这一点?

2 个答案:

答案 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.