当我把" 123"将值转换为输入字段,它将正确转换为字母" ABC",但是当我键入" 112"它只转换第一个这样的数字" A1B"我需要" 112"转换为" AAB"。但是,重复的字符不会被替换。
TypeError: Cannot read property 'clients' of undefined

function char_convert() {
var chars = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"];
var codes = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"];
for (x = 0; x < chars.length; x++) {
for (i = 0; i < arguments.length; i++) {
arguments[i].value = arguments[i].value.replace(chars[x], codes[x]);
}
}
}
char_convert(this);
&#13;
答案 0 :(得分:5)
您可以拆分值并在其上循环并替换必要的值。
var chars = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"];
var codes = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"];
function char_convert(el) {
el.value = el.value.split("").map(function(c) {
return codes[chars.indexOf(c)];
}).join("");
}
<div id="test">
<input type="text" id="txtBox" onchange="char_convert(this);" />
</div>
答案 1 :(得分:2)
您需要一个标记g
才能进行全局替换。和RegExp实例而不是字符串。
new RegExp(chars[x], 'g')
工作示例:
function char_convert() {
var chars = ["1","2","3","4","5","6","7","8","9","0"],
codes = ["A","B","C","D","E","F","G","H","I","J"],
i, j;
for(x = 0; x < chars.length; x++){
for (i = 0; i < arguments.length; i++) {
arguments[i].value = arguments[i].value.replace(new RegExp(chars[x], 'g'), codes[x]);
}
}
}
<div id="test">
<input type="text" id="txtBox" onchange="char_convert(this);"/>
</div>
更紧凑的版本:
function char_convert(s) {
var xx = { '1': 'A', '2': 'B', '3': 'C', '4': 'D', '5': 'E', '6': 'F', '7': 'G', '8': 'H', '9': 'I', '0': 'J' };
Object.keys(xx).forEach(c => { s.value = s.value.replace(new RegExp(c, 'g'), $1 => xx[$1]); });
}
<div id="test">
<input type="text" id="txtBox" onchange="char_convert(this);"/>
</div>
答案 2 :(得分:1)
您可以将Regex
与标记g
arguments[i].value = arguments[i].value.replace(new RegExp(chars[x], 'g'), codes[x]);
但是您的第一个for
循环是多余的,您只能使用indexOf
函数
var chars = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"];
var codes = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"];
function char_convert(str) {
return str.split('').map(e => codes[chars.indexOf(e)]).join('');
}
document.write(char_convert('12321'));
答案 3 :(得分:1)
您可以在单个语句中执行此操作,无需嵌套循环。使用RegEx [0-9]
匹配单个数字和g
标记以匹配所有可能的数字。
// Keep single array, use index of the element
var codes = ['J', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'];
var str = '112';
// Replace all the elements by it's code from array
str = str.replace(/[0-9]/g, m => codes[m]);
console.log(str);
var codes = ['J', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'];
document.getElementById('test').addEventListener('keyup', function() {
var str = this.value;
str = str.replace(/[0-9]/g, m => codes[m]);
// Same as
// str = str.replace(/[0-9]/g, function(m) {
// return codes[m];
// });
document.getElementById('output').innerHTML = str;
}, false);
&#13;
<input id="test" />
<div id="output"></div>
&#13;