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

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

所以:

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

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

    最佳答案

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

    ^-?\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>

    关于regex - 匹配德国数字的正则表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28360966/

    10-12 06:21