删除不需要的' - '字符

时间:2016-06-24 18:12:13

标签: javascript replace subscript

这可能是一个快速简单的答案。我正在为跟踪目标数据的应用程序更新一些代码。我们的客户希望为目标添加负值。听起来不对,但他们希望将其添加到虚拟员工中,以便与公司总数保持平衡。

我已经完成了所有事情,我只是想做出事情和#34;白痴证明"以一种说话和照顾他们可能出现的所有问题的方式。 我更新了" onKeyDown"此应用程序中当前存在的javascript函数,用于修复输入-0或仅 - 符号的用户。我想添加另一个图层以防止它们将 - 符号放在数字的中间,例如56-88而不是-5688。这是我写的代码:

for (j=1; j< f.value.length; j++)
{
    buf2 = f.value.substr(j,1);
    if(buf2 == '-')
    {
     f.value = f.value.replace(f.value.substr(j,1),'');
    }

}

我在1处开始for循环,以跳过字符串的第一个索引,如果它是 - 符号,并通过每个索引检查 - 符号并将其替换为空,基本上删除它。它工作得很好,除非在开头也有 - 符号,然后它删除第一个符号而不是第二个符号。

例如,在测试应用程序时,我输入56-88并按照设计用5688更新此字段,但是当我用-56-88更新它时,它应该用-5688更新它,而是给我56-88。我正在摸不着头脑,因为它看起来应该工作正常。任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:3)

在您的情况下,它与第二个-匹配(如果条件),但替换只会替换开头的第一个匹配项。

相反,只需使用 String#replace 方法与negative look ahead assertion正则表达式一起使用,以避免在开始时-

f.value = f.value.replace(/(?!^-)-/g,'')

console.log(
  '-56-88'.replace(/(?!^-)-/g, '')
);
Regex explanation here.

Regular expression visualization

如果您想让代码正常工作,那么您可以使用 String#substr 方法获取剩余的字符串。

for (j=1; j< f.value.length; j++)
{
    buf2 = f.value.substr(j,1);
    if(buf2 == '-')
    {
      f.value = f.value.substr(0,j) + f.value.substr(j+1);
      // decrement value to avoid skipping character
      j--;
    }    
}

var f = {
  value: '-34-34'
}

for (j = 1; j < f.value.length; j++) {
  buf2 = f.value.substr(j, 1);
  if (buf2 == '-') {
    f.value = f.value.substr(0, j) + f.value.substr(j + 1);
    // decrement value to avoid skipping character
    j--;
  }
}

console.log(f.value)

答案 1 :(得分:0)

有几种方法可以做到这一点取决于你想要解决方案的白痴证明。 首先看看正则表达式,因为Pranav说你可以使用他发布的那个从字符串中删除所有“ - ”事件。你也可以在这里测试正则表达式:

https://regex101.com

 /(?!^-)-/g
    (?!^-) Negative Lookahead - Assert that it is impossible to match the regex below
    ^ assert position at start of the string
    - matches the character - literally
    - matches the character - literally
    g modifier: global. All matches (don't return on first match)

还有更强大的解决方案可能不适用于这种情况,例如使用ANTLR之类的工具并解析所需的任何输入,包括'-a'(但这可能是非常过分杀人。)

同样,您可以在此阶段完全跳过迭代之前删除任何非数字值:

myString = f.value.replace(/\D/g,'');

或者另一种方式是您尝试的递归方式,但在代码行数方面可能比其他方法更大。

问候:)