2012-02-05 48 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!"))); 
相关问题