匹配德国数字的正则表达式

Regular expression to match German number

我想知道,用于测试德国文化正确数字格式的正则表达式会是什么样子。

在德语中,逗号用作小数点,点用于分隔千位。

因此:

在我看来,真正的诀窍是确保可以有多个点,可以选择后跟逗号分隔符

试试这个,它会匹配您的输入:

^(\d+\.)*\d+(,\d+)?

一个好的正则表达式应该是这样的

Regex regex = new Regex("-?\d{1,3}(?:\.\d{3})*(?:,\d+)?");
Match match = regex.Match(input);
Decimal result = Decimal.Zero;
if (match.Success)
     result = Decimal.Parse(match.Value, new CultureInfo("de-DE"));

结果是作为解析值的德国数字。

这是我要使用的正则表达式:

^-?\d{1,3}(?:\.\d{3})*(?:,\d+)?$

Debuggex Demo

这是将其解释为有效浮点数的代码示例(注意字符串替换后的 parseFloat())。

编辑: 如 Severin Klug 的回答中所述,以下代码假定已知数字为德语格式。尝试“检测”一个字符串是否包含德语格式或美国格式数字不是任意的,也超出了这个问题的范围。 '1.234' 在两种格式中都有效,但实际值不同,没有上下文就无法确定是哪种格式。

var numbers = ['1.000', '1,000', '1.000,89', '1.000.123.456,89'];

document.getElementById('out').value=numbers.map(function(str) {
  return parseFloat(str.replace(/\./g, '').replace(',', '.'));
}).join('\n');
<textarea id="out" rows="10" style="width:100%"></textarea>

这个正则表达式应该可以工作:

([0-9]{1,3}(?:\.[0-9]{3})*(?:\,[0-9]+)?)

我会 post 将此作为评论编辑,但我没有足够的声誉。 @funkwurm,你的 post 包含 javascript

var numbers = ['1.000', '1,000', '1.000,89', '1.000.123.456,89', '1.2'];
numbers.map(function(str) {
  return parseFloat(str.replace(/\./g, '').replace(',', '.'));
}).join('\n');

应将德国数字转换为 english/international 数字 - 它对德国千位点后恰好三位数的每个数字执行此操作,就像您在示例数组中使用的数字一样。但是 - 还有一个关键的用例错误:它只是从任何其他字符串中删除点,后面也没有三位数字。 所以如果你插入一个像'1.2'这样的字符串它returns 12,如果你插入'1.23'它returns 123。 这是一个非常关键的行为,如果有人只是采用上面的代码片段并认为它将任何给定的数字正确转换为英文数字。因为已经正确的英文数字会被破坏!所以请小心。