这可能是一个快速简单的答案。我正在为跟踪目标数据的应用程序更新一些代码。我们的客户希望为目标添加负值。听起来不对,但他们希望将其添加到虚拟员工中,以便与公司总数保持平衡。
我已经完成了所有事情,我只是想做出事情和#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。我正在摸不着头脑,因为它看起来应该工作正常。任何帮助表示赞赏!
答案 0 :(得分:3)
在您的情况下,它与第二个-
匹配(如果条件),但替换只会替换开头的第一个匹配项。
相反,只需使用 String#replace
方法与negative look ahead assertion正则表达式一起使用,以避免在开始时-
。
f.value = f.value.replace(/(?!^-)-/g,'')
console.log(
'-56-88'.replace(/(?!^-)-/g, '')
);
如果您想让代码正常工作,那么您可以使用 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说你可以使用他发布的那个从字符串中删除所有“ - ”事件。你也可以在这里测试正则表达式:
/(?!^-)-/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,'');
或者另一种方式是您尝试的递归方式,但在代码行数方面可能比其他方法更大。
问候:)