JavaScript实现文本框输入长度与字节数双重限制方案

作者:青柠

时间:2026-10-26

浏览:350

本文介绍如何使用JavaScript实现文本框输入长度的双重限制,支持按字符数和字节数(1汉字=2字符)两种模式。方案具备实时显示剩余字数、兼容中文输入法无BUG、支持多实例独立运行等特点,并提供完整的JS封装代码及HTML调用示例,适用于需要严格控制输入格式的前端场景。

文章目录
功能/特点:

文本框长度限制功能概述

实现实时显示可输入的字数(或字节数)功能。


提供两种限制方式:基于字符长度和基于字节长度。


确保在中文输入法环境下可正常使用,且无兼容性问题。


支持在同一页面中初始化多个实例,各实例之间互不干扰。


limit.js

JavaScript封装实现与调用

核心JavaScript封装代码如下:

 
function limit(){
var txtNote;//文本框
var txtLimit;//提示字数的input
var limitCount;//限制的字数
var isbyte;//是否使用字节长度限制(1汉字=2字符)
var txtlength;//到达限制时,字符串的长度
var txtByte;
this.init=function(){
txtNote=this.txtNote;
txtLimit=this.txtLimit;
limitCount=this.limitCount;
isbyte=this.isbyte;
txtNote.onkeydown=function(){wordsLimit()};txtNote.onkeyup=function(){wordsLimit()};
txtLimit.value=limitCount;
} 
function wordsLimit(){
var noteCount=0;
if(isbyte){noteCount=txtNote.value.replace(/[^/x00-/xff]/g,"xx").length}else{noteCount=txtNote.value.length}
if(noteCount>limitCount){
if(isbyte){
txtNote.value=txtNote.value.substring(0,txtlength+Math.floor((limitCount-txtByte)/2));
txtByte=txtNote.value.replace(/[^/x00-/xff]/g,"xx").length;
txtLimit.value=limitCount-txtByte;
}else{
txtNote.value=txtNote.value.substring(0,limitCount);
txtLimit.value=0;
} 
}else{
txtLimit.value=limitCount-noteCount;
} 
txtlength=txtNote.value.length;//记录每次输入后的长度
txtByte=txtNote.value.replace(/[^/x00-/xff]/g,"xx").length;
} 
} 

页面调用示例如下:


HTML结构及JS初始化代码如下:

 
<html>
<body>
<input id="txtNote" />
还可输入<input type="text" id="txtCount" />个字符
</body>
<mce:script type="text/javascript"><!--
var lim=new limit();
lim.txtNote=document.getElementById("txtNote");
lim.txtLimit=document.getElementById("txtCount");
lim.limitCount=20;
lim.isbyte=true;
lim.init();
// --></mce:script>
</html>


特定场景下的输入限制方案

关于文本框限制字符长度的另一种写法:


具体HTML代码实现如下:

 
<INPUT onkeydown=if(event.keyCode==13)event.keyCode=9 onkeyup="value=value.replace(/[^0-9- ]/g,'');" maxLength=11 >

上述写法仅限制输入内容必须为数字且最大长度为11个字符。若需强制要求输入恰好11位,不能少也不能多,需进一步处理。


------解决方案--------------------------------------------------------


你确定上面的写法对吗。。。测试怎么通不过呢。。


不对吗 测试那里不对 这个现在只是限制输入一定是数字和11个字符


------解决方案--------------------------------------------------------


参考代码如下:

 
<INPUT onkeydown=if(eventkeyCode==13)event.keyCode=9 onkeyup="value=value.replace(/[^0-9- ]/g,'');" maxLength=11 >

上面这样写只能限制输入的一定是数字 和最大长度为11个字符 如何限制一定要输入11位 不能少也不能多


------解决方案--------------------------------------------------------


具体实现代码如下:

 
<INPUT onkeydown=if(eventkeyCode==13)event.keyCode=9 onkeyup="value=value.replace(/[^0-9- ]/g,'');" maxLength=11 >

上面这样写只能限制输入的一定是数字 和最大长度为11个字符 如何限制……


------解决方案--------------------------------------------------------


验证逻辑代码如下:

 
if(document.form.mobile.value=="")
{ 
alert("您输入错误");
document.forma.mobile.focus();
return false;
} 
else
{ 
if(!/^\d{11}$.test(document.form.mobile.value))
{alert("您输入数字的位数不对");
document.forma.mobile.focus();
return false;
} 
} 

不知道这样行不行。。。


------解决方案--------------------------------------------------------


字符个数控制与表单验证示例

HTML code


完整HTML页面代码如下:

 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>控制textarea的字符个数</title>
<style>
<!-- 
form{
padding:0px;
margin:0px;
font:14px Arial;
} 
input.txt{ /* 文本框单独设置 */
border: 1px inset #00008B;
background-color: #ADD8E6;
} 
input.btn{ /* 按钮单独设置 */
color: #00008B;
background-color: #ADD8E6;
border: 1px outset #00008B;
padding: 1px 2px 1px 2px;
} 
--> 
</style>
<script language="javascript">
function LessThan(oTextArea){
//返回文本框字符个数是否符号要求的boolean值
return oTextArea.value.length < oTextArea.getAttribute("maxlength");
} 
</script>
</head>
<body>
<form method="post" name="myForm1" action="addInfo.aspx">
<p><label for="name">请输入您的姓名:</label>
<input type="text" name="name" id="name" class="txt" value="姓名" maxlength="10"></p>
<p><label for="comments">我要留言:</label><br>
<textarea name="comments" id="comments" cols="40" rows="4" maxlength="50" onkeypress="return LessThan(this);"></textarea></p>
<p><input type="submit" name="btnSubmit" id="btnSubmit" value="Submit" class="btn">
<input type="reset" name="btnReset" id="btnReset" value="Reset" class="btn"></p>
</form>
</body>
</html>

------解决方案--------------------------------------------------------


HTML code


电话号码检测相关代码如下:

 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>电话号码检测 </title>
<meta name="Generator" content="EditPlus">
<meta name="Author" content="Dsmart">
<meta name="Keywords" content="">
<meta name="Description" content="">
</head>
<body>
电话号码:<input id ="phone" type="value" onblur="checkPhone()"/>
<script type="text/javascript">
function checkPhone(){
var phone = document.getElementById("phone").value;
if(phone == ""){
alert("请输入号码");
}else if(!(/^\d{11}$/g.test(phone))){//限制输入11整数
//}else if(!(/^13\d{9}$/g.test(phone)||(/^15[0-35-9]\d{8}$/g(test(phone))|| (/^18[05-9]\d{8}$/g(test(phone))))){
//用于检测用户输入的手机号码是否正确 验证13系列和150-159(154除外)、180、185、186、187、188、189几种号码,长度11位
alert("请输入11整数");
}else{
alert("ok");
} 
} 
</script>
</body>
</html>

------解决方案--------------------------------------------------------


相关代码片段如下:

 
<INPUT onkeydown=if(eventkeyCode==13)event.keyCode=9 onkeyup="value=value.replace(/[^0-9- ]/g,'');" maxLength=11 >

上面这样写只能限制输入的一定是数字 和最大长度为11个字符 如何限制……


这样是可以有个提示,但并没起到限制作用,,当输入少于11位 还是可以提交的,这个是不是要用js来控制的呢

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章