String.prototype.rot13 = function(){
return this.replace(/[a-zA-Z]/g, function(c){
return String.fromCharCode((c <= "Z" ? 90 : 122) >= (c = c.charCodeAt(0) + 13) ? c : c - 26); });
};
请大侠帮忙告知这段代码是什么意思?(尤其是红色的部分)如果翻译成php应该怎么写?
return this.replace(/[a-zA-Z]/g, function(c){
return String.fromCharCode((c <= "Z" ? 90 : 122) >= (c = c.charCodeAt(0) + 13) ? c : c - 26); });
};
请大侠帮忙告知这段代码是什么意思?(尤其是红色的部分)如果翻译成php应该怎么写?
从一些 Unicode 字符值中返回一个字符串。String.fromCharCode([code1[, code2[, ...[, codeN]]]])参数
String必选项。为 String 对象。code1, . . . , codeN可选项。是要转换为字符串的 Unicode 字符值序列。如果没有给出参数,结果为空字符串。说明
在调用 fromCharCode 前不必创建 String 对象。在下面的例子中,test 包含字符串 "plain": var test = String.fromCharCode(112, 108, 97, 105, 110);
返回一个整数,代表指定位置上字符的 Unicode 编码。strObj.charCodeAt(index)参数
strObj必选项。任何 String 对象或文字。index必选项。将被处理的字符的从零开始计数的编号。有效值为 0 到字符串长度减 1 的数字。
v = 90
}else{
v = 122
}
2变量c转化为字符编码+13
90或122 与 编码比较 大 返回c 否则c-26
function rot($c)
{
$ci=$c <= "Z" ? 90 : 122;
echo $c." Z ".$ci."<br>";
$cx=ord($c)+13;
if ($ci>=$cx)
{
$rti=ord($c);
}
else
{
$rti=ord($c)-26;
}
return chr($rti);
}不知道错在哪里啊
这一部分是说如果c是大写字母,则结果为90(Z的unicode字符值);
如果是小写字母,则结果为122(z的unicode字符值)
return this.replace(/([a-mA-M])|([n-zN-Z])/g, function(a,b,c) {
return String.fromCharCode( (b||c).charCodeAt(0) + (b?13:-13) );
});
};这就是个很简单的字符串转换方法
alert('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.rot13());一运行就知道什么意思了
<div>123456789<FONT COLOR="red">0</FONT>123456789<FONT COLOR="red">0</FONT>123456789<FONT COLOR="red">0</FONT>123456789<FONT COLOR="red">0</FONT>123456789<FONT COLOR="red">0</FONT>12</div>
<div id="div1">ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz</div>
<div id="div2"></div>
<SCRIPT LANGUAGE="JavaScript">
<!--
String.prototype.rot13 = function(){
return this.replace(/[a-zA-Z]/g, function(c){
return String.fromCharCode((c <= "Z" ? 90 : 122) >= (c = c.charCodeAt(0) + 13) ? c : c - 26); });
};
div2.innerHTML = div1.innerHTML.rot13();
//-->
// "/[a-zA-Z]/g":正则表达式,匹配所有大小写的英文字母
/*
(c <= "Z" ? 90 : 122) => part1
这一部分是说如果c是大写字母,则结果为90(Z的unicode字符值);
如果是小写字母,则结果为122(z的unicode字符值) (c = c.charCodeAt(0) + 13) => part2
这一段是说将c赋值为它本身unicode字符值+13的数值
如果c="a"的话,赋值后c="n 的unicode字符值" part1 >= part2 ? c : c - 26
这一段跟part1一样是三目运算,满足?前的条件则结果是c,否则结果是c-26
最后这个数值作为 String.fromCharCode()的参数,返回一个字母 这段代码意思是说:
字符串中字母向后推13位(part2的值),如果超过了z或Z(part1的值),那么就从a或A开始再算
就是个不改变字母大小写的循环位移
*/
</SCRIPT>能看懂了不?
真够折腾的,我自己也算锻炼了