charAt()方法和charCodeAt()方法用于选取字符串中某一位置上的单个字符。对于检查用户输入的有效性,这两个方法也是非常有用的。charAt()方法具有一个参数:即所选取字符在字符串中的位置。charAt()方法的返回值就是该位置上的字符。字符串中字符的索引位置从0开始,因此,第一个字符的索引是0,第二个字符的索引是1,依此类推。
charCodeAt()方法与charAt()方法类似,但它并不返回指定位置上的字符本身,而是返回该字符在Unicode字符集中的编码值。计算机只能理解数字,对于计算机来说,所有字符串都是某种编码的数字。当需要使用的是数字编码所代表的字符,而不是使用数字本身时,计算机将根据编码与字符集的内部对应关系,把每一个编码转换为字符集中相应的字符。字符是按顺序进行编码的,例如,字符A的编码是65,字符B的编码是66,依此类推。小写字母从97开始编码,即字母a的编码是97,字母b的编码是98,依此类推。数字字符则是从48开始编码,字符0的编码是48,而字符9的编码是57。用charCodeAt()可以取得大小写字母的Unicode编码值,如:
function charCodeAtTest(n){ var str = "0123456789"; var n; n = str.charCodeAt(n - 1); return(n); }charCodeAtTest(3); //返回50
利用charCodeAt()还可以获取多行文本域输入的字符个数进而限制输入的字符个数,实例如下:
<SCRIPT language=JavaScript>
<!--
var LastCount =0;
function CountStrByte(Message,Total,Used,Remain){ //字节统计
var ByteCount = 0;
var StrValue = Message.value;
var StrLength = Message.value.length;
var MaxValue = Total.value;
if(LastCount != StrLength) { // 在此判断,减少循环次数
for (i=0;i<StrLength;i++){
ByteCount = (StrValue.charCodeAt(i)<=256) ? ByteCount + 1 : ByteCount + 2;
if (ByteCount>MaxValue) {
Message.value = StrValue.substring(0,i);
alert("评论内容最多不能超过 " +MaxValue+ " 个字节!\n注意:一个汉字为两字节。");
ByteCount = MaxValue;
break;
}
}
Used.value = ByteCount;
Remain.value = MaxValue - ByteCount;
LastCount = StrLength;
}
}
//-->
</SCRIPT>
<table>
<form name="form1"> <tr> <td width="23%" height="22" align="right" class="font2">评论人昵称:</td> <td width="77%" height="22" align="left"><input name="评论人昵称" type="text" class="textbox" id="评论人昵称" /></td> </tr> <tr> <td height="22" align="right" class="font2">评论内容:</td> <td height="22" align="left"><textarea name="评论内容" cols="45" rows="5" id="评论内容" onKeyDown="CountStrByte(this.form.评论内容,this.form.total,this.form.used,this.form.remain);" onKeyUp="CountStrByte(this.form.评论内容,this.form.total,this.form.used,this.form.remain);"></textarea> <br /> 最多允许 <input name="total" type="text" disabled class="textbox" id="total" value="100" size="3"> 个字节 已用字节: <input name="used" type="text" disabled class="textbox" id="used" value="0" size="3"> 剩余字节: <input name="remain" type="text" disabled class="textbox" id="remain" value="100" size="3"> </td> </tr> <tr> <td height="22"> </td> <td height="22" align="left"><input name="add" type="submit" class="button" id="add" value="提 交" /> <input name="Submit2" type="reset" class="button" value="重 置" /> </td> </tr> </form> </table>
其中ByteCount = (StrValue.charCodeAt(i)<=256) ? ByteCount + 1 : ByteCount + 2;判断输入的是否为汉字,如果charCodeAt(i)<=256既不是汉字,字节数加1,否则位汉字,字节数加2.以此来计算文本域中的总字节数。
转载于:https://www.cnblogs.com/rabbit2012/archive/2012/11/29/2794392.html