2012-02-05 17 views
1

我試圖從一個變量一次替換多個字符串值,並將其從表單數據傳遞到一個新的。使用正則表達式替換JavaScript中的字符串中的多個值

我的最終結果是做出一個非常簡單的(粗略的)加密\解密程序。 這是我到目前爲止。我似乎無法找到任何從這裏去的地方。

function testResults (form) { 
    var TestVar = form.inputbox.value; 
    var NewVar = TestVar.replace(/a/g, "b").replace(/b/g, "c"); 
    alert ("Replaced text: " + NewVar); 
} 
+0

那你想幹什麼?正則表達式在你的代碼中是正確的。 – ShankarSangoli 2012-02-05 06:11:19

回答

1

我不認爲一個正則表達式是去一個正確的方式混淆算法。你應該用你自己的代碼算法來處理字符串,而不是用正則表達式。這裏有一個值的字符串中的每個字符撞了一個簡單的方法就像你試圖用正則表達式做:

function testResults (form) { 
    var input = form.inputbox.value; 
    var output = []; 
    for (var i = 0; i < input.length; i++) { 
     output[i] = String.fromCharCode(input.charCodeAt(i) + 1); 
    } 
    output = output.join(""); 
    alert ("Replaced text: " + output); 
} 

你可以在這裏看到一個例子:http://jsfiddle.net/jfriend00/LYnAV/

僅供參考,請不要稱爲加密,因爲它不是加密。這是模糊的(以不安全的方式掩蓋了原始價值)。

1

如果我理解正確的話,你想用「C」等來代替每個「A」與「B」,每個「B」,但如果你這樣做,直接(如你的例子),你將'a'生成的所有'b'最終替換爲'c',這不是你想要的。

也許你可以在2個階段的工作:

A.替換每個字符具有特殊字符串,

B.替換加密每個特殊字符串。

例如,您的例子是這樣的:

var TempVar = TestVar.replace(/a/g, "{{{a}}}").replace(/b/g, "{{{b}}}"); 
var NewVar = TempVar.replace(/{{{a}}}/g, "b").replace(/{{{b}}}/g, "c"); 
1

如果您正在試圖通過一個那麼你嘗試符號的所有ASCII碼轉變爲做到這一點是不是很好。看看這段代碼http://jsfiddle.net/AHgZq/

$('#in').keyup(function(){ 
    var val = $(this).val(), newval = ''; 
    for(var i=0; i<val.length; i++) 
    { 
     newval += String.fromCharCode(val.charCodeAt(i)+1); 
    } 
    $('#out').val(newval); 
}); 

在輸入ID爲輸入任何字母=「在」它需要整個字符串,需要每個字母在裏面。用函數charCodeAt獲取它的ASCII代碼,在fromCharCode函數的幫助下將其加1並轉換回ASCII符號。之後,它將id ='out'的輸入值設置爲該移位的字符串。示例代碼使用jQuery來快速訪問元素,但通常不需要它。

或者你可以用正則表達式 http://jsfiddle.net/8sMvg/1/

$('#in').keyup(function(){ 
    var val = $(this).val(), newval = ''; 
    newval = val.replace(/(\w)/g, 
      function(match,group){ 
         return String.fromCharCode(match.charCodeAt(0)+1); 
      }); 
    $('#out').val(newval); 
}); 

做對於你的代碼它看起來像

function testResults (form) { 
    var TestVar = form.inputbox.value; 
    var NewVar = TestVar.replace(/(\w)/g, 
       function(match){ 
        return String.fromCharCode(match.charCodeAt(0)+1); 
       }); 
    alert ("Replaced text: " + NewVar); 
} 
1

如果你想轉移字母,你不應該用這種方式替換。

我建議你做this方式:

function shift(str, num) { 
    var res = ""; 

    for (var i = 0; i < str.length; i++) { 
     str = str.toUpperCase(); 
     var ch = str.charAt(i); 
     if ("ABCDEFGHIJKLMNOPQRSTUVWXYZ".indexOf(ch) != -1) { 
      var code = str.charCodeAt(i); 
      var shiftedCode = 'A'.charCodeAt() + (code - 'A'.charCodeAt() + num) % ('Z'.charCodeAt() - 'A'.charCodeAt() + 1); 
      res += String.fromCharCode(shiftedCode); 
     } else { 
      res += ch; 
     } 
    } 

    return res;  
} 

function encStr(str) { 
    return shift(str, 1); 
} 

function decStr(str) { 
    return shift(str, 25); 
} 

alert(decStr(encStr("this string is encrypted and decrypted correctly!"))); 
相關問題