我正在尝试从一个变量中一次替换多个字符串值,并将其从表单数据传递给新变量。
我的最终结果是制作一个非常简单(粗略)的加密\解密程序。 这就是我到目前为止所拥有的。我似乎无法找到从这里去的地方。
function testResults (form) {
var TestVar = form.inputbox.value;
var NewVar = TestVar.replace(/a/g, "b").replace(/b/g, "c");
alert ("Replaced text: " + NewVar);
}
答案 0 :(得分:1)
如果我理解正确,你想用'b'替换每个'a',用'c'等替换每个'b',但是如果你直接这样做(如你的例子中那样),你就得到了所有' b'从'a'生成,最后用'c'替换,这不是你想要的。
也许你可以分两个阶段工作:
一个。用特殊字符串
替换每个字符B中。用加密替换每个特殊字符串。
例如,您的示例将如下所示:
var TempVar = TestVar.replace(/a/g, "{{{a}}}").replace(/b/g, "{{{b}}}");
var NewVar = TempVar.replace(/{{{a}}}/g, "b").replace(/{{{b}}}/g, "c");
答案 1 :(得分: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 ='in'的任何字母上,它取整个字符串,取其中的每个字母。获取函数charCodeAt
的ASCII代码,将其增加1并在fromCharCode
函数的帮助下转换回ASCII符号。之后,它将id ='out'的输入值设置为该移位的字符串。示例代码使用jQuery来快速访问元素,但一般不需要它。
或者你可以用regexp来做 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);
}
答案 2 :(得分: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/。
仅供参考,请不要将此加密称为加密,因为它不是加密。它是模糊的(以非安全的方式模糊原始值)。
答案 3 :(得分: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!")));