我刚刚创建了一个脚本,该脚本在理论上将“ 9”替换为“ Nein”(无种族主义意图),并且输出的结果与预期的完全不同。
不是打印“ Nein Nein Nein”,而是输入“ 999”,而是打印“ undefined Nein 99 Nein 9”。
var inputString;
var outputString;
function submit() {
inputString = document.getElementById('input').value;
for (i = 0; i <= inputString.length; i++) {
outputString += inputString.replace(9, ' Nein ');
document.getElementById('outputP').innerHTML = outputString;
inputString = inputString.substring(1);
}
}
答案 0 :(得分:0)
您可以使用正则表达式
function submit() {
inputString = document.getElementById('input').value;
outputString = inputString.replace(/9/g, ' Nein');
document.getElementById('outputP').innerHTML = outputString;
}
<input id='input' />
<button onclick="submit()">submit</button>
<div id='outputP'></div>
答案 1 :(得分:0)
第一个问题是您要在for循环中重新定义inputString
。
我不清楚您打算如何重新定义inputString
,但是这里有一个使用replace
方法执行您想要的示例。我认为您以for
循环结尾的原因是因为您错过了/g
标志:
const inputString = '999';
console.log(inputString.replace(/9/g, ' Nein '));
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp
答案 2 :(得分:0)
outputString
未初始化,因此为undefined
。因此,第一个串联将使用字符串值undefined
或"undefined"
完成。
您可以使用简单的正则表达式来完成工作,而不必遍历字符串并一一替换:
function nineToNein(input){
return input.replace(/9/g, " Nein ");
}
答案 3 :(得分:0)
如果您打算循环播放,我建议您在循环中使用迭代器并逐个字符进行替换。
var inputString;
var outputString = '';
function submit() {
inputString = document.getElementById('input').value;
for (let i = 0; i < inputString.length; i++) {
outputString += inputString[i].replace(9, ' Nein ');
}
document.getElementById('outputP').innerHTML = outputString;
}
submit();
<input id="input" value="999" />
<p id="outputP"></p>
答案 4 :(得分:0)
您应该使用inputString [index]。
var inputString = "999";
var outputString = "";
var n = inputString.length;
for(var i = 0; i< n; i++) {
outputString += inputString[i].replace(9, ' Nein ');
}
console.log(outputString);