正则表达式匹配德国数字

时间:2015-02-06 07:51:45

标签: regex formatting cultureinfo

我想知道,用于测试德国文化的正确数字格式的正则表达式将如何。

在德语中,逗号用作十进制标记,点用于分隔数千个。

因此:

  • 1.000等于1000
  • 1,000等于1
  • 1.000,89等于1000.89
  • 1.000.123.456,89相当于1000123456.89

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

5 个答案:

答案 0 :(得分:5)

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

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

Regular expression visualization

Debuggex Demo

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

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>

答案 1 :(得分:1)

这个正则表达式应该有效:

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

答案 2 :(得分:1)

本来可以将此作为评论发布,但是我没有足够的声誉。 @funkwurm,您的帖子https://stackoverflow.com/a/28361329/7329611包含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');

应当将德语数字转换为英语/国际数字-它对每个数字都执行精确的三位数,就像在示例数组中使用的数字一样,该数字在德语千位点后。但是-还有一个严重的用例错误:它只是从其他任何字符串中删除点,而且后面也不要三位数。 因此,如果您插入类似“ 1.2”的字符串,则返回12;如果您插入“ 1.23”,则返回123。 如果有人只接受上面的代码片段,并认为它将正确地将任何给定的数字转换为英语,那么这是非常关键的行为。因为已经正确的英文数字将被破坏!所以请小心。

答案 3 :(得分:0)

尝试此操作将匹配您的输入:

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

答案 4 :(得分:0)

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

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"));

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