【问题标题】:Javascript text input on input text change format to two decimal places输入文本上的 Javascript 文本输入将格式更改为小数点后两位
【发布时间】:2019-12-26 06:07:42
【问题描述】:

您好,我有以下代码可以清理输入文本中输入的文本。

let formattedText = text
        .replace(/[^0-9.]/g, "") // remove chars except number, point.
        .replace(/(\..*)\./g, "$1") // remove multiple points.
        .replace(/^0+(\d)/gm, "$1"); // remove multiple leading zeros.

我被困在一个场景中,我想在不使用 toFixed(2) 的情况下限制为两位小数

例如用户应输入 100.203

【问题讨论】:

  • \d+\.\d{0,2} -- 1 位或更多位,十进制,0 - 2 位。

标签: javascript regex ecmascript-6


【解决方案1】:

试试吧。

.replace(/(\.\d{3})\d+/g, '$1');

【讨论】:

    【解决方案2】:

    您可以将第二个正则表达式更改为此

    .replace(/(\.\d{1,2}).*/g, "$1") // remove multiple points.
    

    (\.\d{1,2}).*/
    
    • (\.\d{1,2}) - 匹配 . 后跟 1 位或 2 位数字
    • .* - 匹配除新行零次或多次以外的任何内容

    let formattedText = (text) => text
      .replace(/[^0-9.]/g, "")
      .replace(/\.{2,}/g,'.')
      .replace(/^0*([^0]\d*\.\d{1,2}).*/g, "$1")
      
      
    console.log(formattedText('abcb123.25252.235252abdbch'))
    console.log(formattedText('abcb123.2.2gvsgvs'))
    console.log(formattedText('abcbcbbc123'))
    console.log(formattedText('123.avsvs.123'))
    console.log(formattedText('avsvs.1234'))
    console.log(formattedText('avsvs1234'))

      .replace(/\.{2,}/g,'.')
    

    这将替换连续的. 句点(如果有),即abc123.aba.123 在第一次替换字符串后将变为123..123,因此要使其成为有效数字,我们需要将.. 替换为单个.


    .replace(/^0*([^0]\d*\.\d{1,2}).*/g, "$1")
    

    这只是结合了 combine yours 正则表达式,用于删除前导 0 和多个小数,这个正则表达式意味着

    • ^0* - 在字符串开头匹配 0 零个或多个时间
    • ([^0]\d*\.\d{1,2}) - 匹配非零数字,后跟任意数量的数字,然后是 .,然后是一位或两位数字
    • .* - 匹配除新行以外的任何内容

    【讨论】:

    • 谢谢你的代码狂人。您能否在 .replace(/\.{2,}/g,'.') 和 .replace(/^0*([^0]\d*\.\d{1,2}) 上添加 cmets .*/g, "$1") 做吗?
    • @Rigorousimplementation 更新了他们每个人的工作,你可以看到更新
    猜你喜欢
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    • 2010-12-09
    • 2020-02-23
    • 1970-01-01
    • 2013-04-03
    • 2019-02-25
    • 1970-01-01
    相关资源
    最近更新 更多