【问题标题】:JavaScript RegEx: match all minuses that are not at start or end of string for currency inputJavaScript RegEx:匹配所有不在货币输入字符串开头或结尾的减号
【发布时间】:2016-12-17 11:34:06
【问题描述】:

对于货币输入,我想替换所有不在字符串开头的减号输入,或者当它是最后一个字符时,前面没有逗号。

在输入事件中,我已经用一个简单的正则表达式调用了其他一些无效输入的替换:

        input.replace(/[^0-9\.\,\-]/g, '')
             .replace('.', ',');

如果我可以扩展这个正则表达式来去除无效的缺点,那就太好了。

所需行为的一些示例:

  • 50-50 -> 5050
  • 50,00- -> 50,00
  • -5-0,- -> -50,-

编辑:结尾或开头的双减号也应该去掉。

  • --50,00-> -50,00
  • 50,-- -> 50,-

我想我可以从积极的前瞻 -(?=.) 开始,但这仍然与第一个字符匹配。

此外,我发现this post 几乎相反(开始和结束时不允许使用减号),但仍会匹配整个字符串。不是单独的缺点。

任何帮助将不胜感激。

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    对特定的正则表达式模式使用以下方法:

    var replaceHyphen = function (str) {
      return str.replace(/(\d)-|(-)-/g, '$1$2');
    };
        
    console.log(replaceHyphen('50-50'));
    console.log(replaceHyphen('50,00-'));
    console.log(replaceHyphen('-5-0,-'));
    console.log(replaceHyphen('--50,00'));
    console.log(replaceHyphen('50,--'));

    【讨论】:

    • 这看起来很有希望,但它仍然允许在开始和结束时使用双减号。也许我并不清楚这一点。更新了问题。
    • 实际上,是的,您的问题对于双连字符还不够清楚。现在,检查我的更新,它也适用于双连字符
    • 优秀。谢谢。
    【解决方案2】:

    函数可以吗?这应该可以解决问题:

    function removeMinus(str) {
      var prefix = str.startsWith("-") ? "-" : "";
      var postfix = str.endsWith(",-") ? "-" : "";
      return prefix + str.split("-").join("") + postfix
    }
    

    【讨论】:

      【解决方案3】:

      您可以使用单词边界\b 来做到这一点。

      RegExp Boundaries

      \b

      匹配单词边界。这是一个单词字符后面没有或前面没有另一个单词字符的位置,例如在字母和空格之间...

      https://regex101.com/r/YzCiEx/1

      var regex = /\b-+\b/g;
      
      console.log("50-50".replace(regex, ''))
      console.log("50,00".replace(regex, ''))
      console.log("-5-0,-".replace(regex, ''))
      console.log("-5------6-".replace(regex, ''))
      console.log("-6--66-6,-".replace(regex, ''))

      【讨论】:

      • 提供信息,但是这仍然允许末尾的减号前面没有逗号和开头或结尾的双连字符。也许我可以以此为起点。谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-28
      • 2023-03-19
      • 2019-08-06
      • 2016-01-02
      • 1970-01-01
      相关资源
      最近更新 更多