我想知道,用于测试德国文化的正确数字格式的正则表达式将如何。
在德语中,逗号用作十进制标记,点用于分隔数千个。
因此:
在我看来,真正的诀窍是确保可能有几个点,可选地后跟逗号分隔符
答案 0 :(得分:5)
这是我要使用的正则表达式:
^-?\d{1,3}(?:\.\d{3})*(?:,\d+)?$
这是一个将其解释为有效浮点的代码示例(在字符串替换后注意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"));
结果是德国数字作为解析值。