0

Web ページの電子メール アドレスを難読化しようとしています。@ をxyに、ピリオドをyyに変換する正規表現があります。それは働いています。ページが送信されたときに実行して元に戻すjsがありますが、機能していません。そのスクリプトは次のとおりです。

function undo(){
    var oldfield = document.getElementById('hchtest').value;
    var newfield = oldfield.replace("_xy_", "@");
    var nu2field = newfield.replace("_yy_", "\.");

    document.getElementById('hchtst2').value = nu2field;
}

機能していないステートメントは var nu2field = newfield.replace( yy , "."); です。

考えられるすべての組み合わせを試しましたが(エスケープ文字なし、正規表現など)、喜びはありませんでした。

また、複数ステップの置換をなくすことでこれをエレガントにすることができるかどうかも知りたいです。

どんな助けでも大歓迎です。

4

2 に答える 2

1

文字列内でエスケープする必要はありません..replace(/_yy_/g,'.')正常に動作するはずです。

また、置換をチェーンすることもできます:

document.getElementById('hchtst2').value =
    document.getElementById('hchtest').value.replace(/_xy_/g,'@').replace(/_yy_/g,'.');

しかし、元の文字列に or が含まれているとどうなります_xy__yy_?

于 2012-05-15T14:20:42.787 に答える
0

代わりにこれはいらない?追加のアンダーバーはなぜですか?

var newfield = oldfield.replace("xy", "@");
var nu2field = newfield.replace("yy", "\.");

いずれにせよ、ここに別の解決策があります:

var newfield = oldfield.split("xy").join("@");
var nu2field = newfield.replace("yy").join(".");

そしてワンライナー:

var newfield = oldfield.split("xy").join("@").split("yy").join(".");
于 2012-05-15T14:19:29.460 に答える