<form name=form1 onsubmit=return(ma())>
<input type=text name=text1>
<input type=submit value=提交>
</form>
<script language=javascript>
function ma()
{
if(!form1.text1.value.match(/^[a-zA-Z]{1,16}$|^[\u4e00-\u9fa5]{1,8}$/))
{
alert("请输入汉字或英文,汉字不可超过8个,英文不可超过16个!")
return false
}
}
</script>
<input type=text name=text1>
<input type=submit value=提交>
</form>
<script language=javascript>
function ma()
{
if(!form1.text1.value.match(/^[a-zA-Z]{1,16}$|^[\u4e00-\u9fa5]{1,8}$/))
{
alert("请输入汉字或英文,汉字不可超过8个,英文不可超过16个!")
return false
}
}
</script>
-----------------
如果你想这样,那么你就必须实时监控你的输入框的动作,比如在你的onkeydown或是onblur事件,随时测试当前字数,发现过长,则提醒或切断.
<HTML>
<HEAD>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META NAME="Author" CONTENT="Seagle.K">
<SCRIPT LANGUAGE="JavaScript">
function limitTxtByte(o, len)
{
var str = o.value;
var rscn = /^[\u4E00-\u9FA5]$/i;
var ach;
var rsstr = '';
var count = 0;
for (var i=0; i<str.length; i++)
{
ach = str.substr(i, 1);
if (rscn.test(ach))
{
if (count+2 <= len)
{
count += 2;
}else
{
break;
}
}else
{
if (count+1 <= len)
{
count += 1;
}else
{
break;
}
}
rsstr += ach;
} if (rsstr != str)
{
o.value = rsstr;
}
}
</SCRIPT>
</HEAD>
<BODY>
只能输入16个字节内容的文本框:
<INPUT TYPE="text" name="txt" onpropertychange="limitTxtByte(this, 16)">
</BODY>
</HTML>
to seeu1688(kangel) :非常感谢你提供的代码,但是在测试中发现只要我输入8个以上的汉字windows系统就会自动报错并关闭ie,不知道如何去解决着个问题?还望赐教?!谢谢!
IE5.01
似乎会让这段代码出错,可能是ie5的bug所致
ie5.5+以上环境是正常的
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD><BODY>
<input type=text name=text1 onkeydown="return(f(this));">
</BODY>
</HTML>
<SCRIPT LANGUAGE="JavaScript">
<!--
function f(obj)
{
if(GetLen(obj.value) >=10)
{
return(false);
}
}//功能:取得字符串的实际长度,汉字取2,半角字母取1,累加而成
//str 要计算的文本
function GetLen(str)
{
var len = 0;
for(i=0; i<str.length; i++)
{
if(str.charCodeAt(i)>255)
len += 2 ;
else
len++ ;
}
return len;
}
//-->
</SCRIPT>