0

ボックス内に入力されている文字を数字に置き換えたいと思い<input type="text">ます。

現在、私はこのコードを使用しています:

function Auto(str) 
{
  var search = new Array(
    "q","w","e","r","t","y","u","i","o","p"
  );
  var replace = new Array(
    "1","2","3","4","5","6","7","8","9","0"
  );
  return str.replace(search, replace);
}

// find_str で find を作成する必要がありますが、方法がわかりません...

$("#find").on('keypress',function(){
  find_str = $("#find").val();
  alert (Auto(find_str));
});

find_str で文字を見つける方法と、このコードの書き方を教えてください。

PS: alert() はテスト専用です。

4

2 に答える 2

1

replace配列はしません。複数の置換など、いくつかの代替手段がありますが、音訳は良いようです。

var map = {q: '1', w: '2', e: '3', r: '4', t: '5', y: '6', u: '7', i: '8', o: '9', p: '0'};
var r = '';

for(var i = 0; i < str.length; i++) {
    r += map[str.charAt(i)] || str.charAt(i);
}

return r;

また、フォーカスの問題が発生する可能性があり、ユーザーにとっては非常に煩わしいので、このようなことはできるだけ避けてください。

于 2013-01-17T03:24:57.767 に答える
0

replace正規表現 (または正規表現に変換される文字列) を最初の引数として取り、一致を置き換える文字列または置換を計算する関数を受け取ります。

したがって、これを使用します:

var map = {q:'1', w:'2', e:'3', r:'4', t:'5', y:'6', u:'7', i:'8', o:'9', p:'0'};
var keys = "[";
for (var key in map)
    keys += key.replace(/[\]-]/, "\\$&");
keys += "]";
var regex = new RegExp(keys, "g") // /[qwertyuiop]/g

function auto(str) {
    return str.replace(regex, function(match) {
         return map[match]; // the respective number
    });
}
$("#find").on('keyup', function(){
    alert( auto( this.value ));
});

本当に配列を使用する必要がある場合は、もちろんそれも可能です。

var search =  ["q","w","e","r","t","y","u","i","o","p"],
    replace = ["1","2","3","4","5","6","7","8","9","0"];
var map = {};
for (var i=0; i<search.length && i<replace.length; i++)
    map[ search[i] ] = replace[i];
var regex = new RegExp("["+search.join("").replace(/[\]-]/g, "\\$&")+"]", "g");
于 2013-01-17T03:25:41.020 に答える