Javascript 如何正确使用此代码将所有出现的多个十进制元素替换为一个十进制元素?
我在ReactJs中构建了一个计算器。我想防止用户输入多个十进制元素,例如Javascript 如何正确使用此代码将所有出现的多个十进制元素替换为一个十进制元素?,javascript,reactjs,regex,replace,Javascript,Reactjs,Regex,Replace,我在ReactJs中构建了一个计算器。我想防止用户输入多个十进制元素,例如2..3每当用户这样做时,我想用一个替换所有的十进制元素。所以2..3将变成2.3 这就是我试图实现这一目标的方式,但它不起作用 if (calc.input.match(/\.{2,}/g)) { setCalc(calc.input.replace(/\.{2,}/g, ".")); } setCalc是我用来改变状态的钩子。试试这个 var S='456...........876'; S
2..3
每当用户这样做时,我想用一个替换所有的十进制元素。所以2..3
将变成2.3
这就是我试图实现这一目标的方式,但它不起作用
if (calc.input.match(/\.{2,}/g)) {
setCalc(calc.input.replace(/\.{2,}/g, "."));
}
setCalc
是我用来改变状态的钩子。试试这个
var S='456...........876';
S=S.replace(/\.+/g,'.'); // I escape the period with a slash and place the + next to it to mean "all".
document.write(S);
这应该会有所帮助。如果我们在敲击键时已经在字符串中找到小数点,它基本上可以防止输入发生
const text=document.querySelector('input[type=“text”]”);
text.addEventListener('keypress',e=>{
//如果文本已经包含一个小数,并且当前键是一个小数,请防止添加新键。
if(text.value.includes('.')和&e.key='.')e.preventDefault();
});代码>
记住字符串是不可变的,因此要更改calc.input
的值,我必须将其重新分配给自身。因此,这种方法在这个特定的用例中对我有效
请注意,它不会阻止9.9.9表格中的输入
if (calc.input.match(/\.{2,}/g)) {
setCalc(calc.input = calc.input.replace(/\.{2,}/g, "."));
}
最好只是将输入标记为无效,而不是干扰输入用户。首先,总是提供比“无效”更多的信息。其次,最好是简单地将其标记为无效,并阻止他们提交或计算或其他任何内容,或者在更新状态值之前检查第二个小数点。因为这样做可能会让人困惑,因为可能不清楚保留哪个小数点是正确的,哪些小数点应该删除。我不知道这有什么问题,正则表达式似乎工作正常。什么是calc
和setCalc
,您能显示整个代码吗?奇怪的是,你有这个额外的.input
属性访问权限。这可能是我最初的方法。但我是作为freeCodeCamp认证项目之一来做的,其中一个要求是阻止用户这样做。@Berto99正确的方法是/…/.test(calc.input)
,但实际上OPs代码在这方面已经起作用了。谢谢。让我尝试在ReactJS中重写此方法。使用此方法,用户仍然可以通过将无效值粘贴到字段中来输入该值。@JemiSalo更正,在这种情况下,input
或change
也需要一个事件。然而,OP询问了一个用户输入值的情况。谢谢你的努力。我已经使用了这种方法。它不起作用。