主要解决难点:

1 中文 全角2字符深深的恶意

2 多行输入textarea 手动,自动换行问题

3 获得每行内容

原创,转载请注明出处!

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>textarea</title>
</head> <body style="margin:0px; background:#000">
<textarea id="ipt" placeholder="输入试试" rows="" style="word-break:break-all;overflow:hidden; position:absolute;top:200px; left: 220px; font-family:Arial, Helvetica, sans-serif; width:400px; height:120px; line-height:40px; color:#FFF; font-size:20px; text-align:center;background-color:transparent;" ></textarea>
<input id="sub" type="button" value="获得结果" style=" position:absolute; width:200px; height:100px; left:220px; top:500px"/>
</body>
<script> //-------------textarea 多行输入,限制字数与行数
//中 英 全半角 混检
//luoee2008@126.com 2016.10.06 //-------------重要说明--很重要
//textarea 的css需设置word-break:break-all 主要因为英文单词的原因。
//textarea 的宽度必须大于 每行的最大字符数占用的宽度 ,建议输入同等字符的0占位测试 //-------------参数说明
//bind;// 需要绑定的 textarea id
//maxCol;//每行最大字符数,汉字、中文标点算2字符
//maxRow;//最多行数 //-------------使用方式
var info=new AUTO_WRAP("ipt",,)
//获得输入结果 数组形式,返回每行类容
document.getElementById("sub").addEventListener("click",function(e)
{
alert(info.message)
}) //----------------------------------核心代码----------------------------------
function AUTO_WRAP(bind,maxCol,maxRow)
{
var _s=this;this.message
var inter=setInterval(format,16.6667);//有兴趣的可以使用requestAnimationFrame var onInput=false;//是否正在输入中文
document.getElementById(bind).addEventListener("compositionstart",function(e){ onInput=true; })
document.getElementById(bind).addEventListener("compositionend",function(e){onInput=false; }) function format()
{
if(onInput){console.log("正在输入中文,暂停检测!");return;}
 
var dInfo="",formatInfo,len,_se dInfo = document.getElementById(bind).value;
dInfo = dInfo.split("\n"); len=dInfo.length;
if(len>maxRow)
{
console.log("行数超限,自动删除超行部分");
dInfo.splice(maxRow);
len=maxRow;
} formatInfo=""
for(var i=;i<len;i++)
{
//判断每行是否 > maxCol
var arr=getBreak(dInfo[i])
if(arr.length>)
{
var _temp=dInfo[i],add=""; for(var j=;j<arr.length;j++)
{
var sNum=j==?:arr[j-]
var eNum=j==?arr[j]:arr[j]-arr[j-]
add+=_temp.substr(sNum,eNum)+"\n";
}
add+=_temp.substr(arr[j-]);
dInfo[i]=add;
}
//组装
formatInfo+=dInfo[i]+(i<len-?"\n":"")
}
document.getElementById(bind).value=formatInfo;
_s.message=formatInfo.split("\n");//这里有个逻辑问题,理论不会产生。暂未处理
} function getBreak(v)
{
if(v==""){return [];} var arr=[]; var len=; //中英字符长度计数
var count=; //实际字符个数计数
var temp=-; //判断换行。(例如 每行限制20字符,上一次检测为19字符,下一次+2字符 则跳过了)
var lastCount=;// 和上一个参数配合使用 如果是跳过,则使用此参数 //计算
for(i=;i<v.length;i++)
{
var c = v.charCodeAt(i);
if ((c >= 0x0001 && c <= 0x007e) || (0xff60 <= c && c <= 0xff9f)) { len++;} else {len += ;}
count++;
//不是首行第0个 空字符
var cut=Math.floor(len/maxCol)
if(temp!=-&&cut!=temp)
{
//跳过
if(len%maxCol!=)
{
arr.push(lastCount)
}
else //正好
{
arr.push(count)
}
}
temp=cut;
lastCount=count;
}
//矫正, 如果刚好是临界值 则抹去最后一次换行
if(len%maxCol==&&arr.length>)
{
arr.splice(arr.length-,)
} return arr
}
return this;
} </script>
</html>

测试 通过:

pc:

  chrome,firefox,safira,

ios

  微信(safira),

android

  微信(x5)

其他未测 ,如使用中发现问题请回帖反馈

PS:如果实时监测会导致输入问题,可以去掉实时监测,仅监听textarea失去输入焦点时,执行一次代码即可 。

中文标点 。 ? ! , 、 ; : “ ” ‘ ' ( ) 《 》 〈 〉 【 】 『 』 「 」 ﹃ ﹄ 〔 〕 … — ~ ﹏ ¥

【所见即所得】textarea 精确限制字数、行数,中、英、全半角混检 。源码带注释的更多相关文章

  1. 使用C#重写网上的60行 Javascript 俄罗斯方块源码 (带注释)

    在很久很久以前,就已经看过 60行Js的俄罗斯方块源码.无奈当时能力不够看明白,当时觉得就是个神作. 现在总算有空再看了,顺便用c#实现一遍(超过60行),顺道熟悉下Js API. 网上其他博客也有分 ...

  2. Tyrion中文文档(含示例源码)

    Tyrion是一个基于Python实现的支持多个WEB框架的Form表单验证组件,其完美的支持Tornado.Django.Flask.Bottle Web框架.Tyrion主要有两大重要动能: 表单 ...

  3. Tyrion 中文文档(含示例源码)

    原文出处: Mr.Seven   Tyrion是一个基于Python实现的支持多个WEB框架的Form表单验证组件,其完美的支持Tornado.Django.Flask.Bottle Web框架.Ty ...

  4. Spring中AOP相关的API及源码解析

    Spring中AOP相关的API及源码解析 本系列文章: 读源码,我们可以从第一行读起 你知道Spring是怎么解析配置类的吗? 配置类为什么要添加@Configuration注解? 谈谈Spring ...

  5. sqlserver和oracle中对全半角的转换

    oracle中对全半角的转换 to_single_byte(c)转换成半角 to_multi_byte(c)转换成全角 SELECT To_single_byte('881898?71') FROM ...

  6. (转)Eclipse中需要查看某个类的源码,直接按住Ctrl 然后点击想要查看的类或则方法

      文章转自:http://blog.sina.com.cn/s/blog_52f623240102vpcr.html   在Eclipse中需要查看某个类的源码,直接按住Ctrl 然后点击想要查看的 ...

  7. java中的==、equals()、hashCode()源码分析(转载)

    在java编程或者面试中经常会遇到 == .equals()的比较.自己看了看源码,结合实际的编程总结一下. 1. ==  java中的==是比较两个对象在JVM中的地址.比较好理解.看下面的代码: ...

  8. maven项目在eclipse中debug时看不到源码?

    就像图中一样,看不到源码,但是能step over,也可查看变量值,点击edit source lookup path,选定项目的一瞬间源码会出来,但马上又变回原样了,求大神指教~ 我也遇到这个问题了 ...

  9. Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析

    Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析 说明:Java生鲜电商平台中,由于服务进行了拆分,很多的业务服务导致了请求的网络延迟与性能消耗,对应的这些问题,我们 ...

随机推荐

  1. HTML5Canvas标签(https://developer.mozilla.org)

  2. jQuery.serialize() 函数详解////////////z

    serialize()函数用于序列化一组表单元素,将表单内容编码为用于提交的字符串. serialize()函数常用于将表单内容序列化,以便用于AJAX提交. 该函数主要根据用于提交的有效表单控件的n ...

  3. mac下使用gcc

    1.下载安装macports:http://www.macports.org/install.php 安装完成之后,打开终端 2.在终端中输入 port install gcc_select 3.使用 ...

  4. Qt中使用Windows API

    在Windows平台上进行开发,不可避免与Windows API打交道,Qt中使用的时候要添加对应API的头文件和链接lib文件,另外使用的Windows API的代码部分要使用#ifdef  Q_O ...

  5. word record about IR target detecting and tracking

    1 is submerged in background clutter 淹没在背景杂波中 2 performe poorly for the dim small targets in sever c ...

  6. 使用MacBook Air的4项基本技巧

    MacBook Air可以说是笔记本电脑中的翘楚:性能优异.拥有超长的电池使用时间的同时保持了轻盈的体态.纤薄的外形,这几乎满足了人们对笔记本的所有要求.如果你也是一个MacBook Air用户,不妨 ...

  7. npm Scripts使用教程【译】

    Why npm Scripts? 原文发表于 2016.2.12,原文地址: https://css-tricks.com/why-npm-scripts/ 以下是访客Damon Bauer发布的一篇 ...

  8. Qt qml pageview 左右滑动分页组件

    [先看效果] [下载]http://download.csdn.net/detail/surfsky/8516949 [调用] 分页视图 左右分页滑动列表组件 示例 PageView{ id: pv ...

  9. linux下TCP/IP及内核参数优化调优(转)

    Linux下TCP/IP及内核参数优化有多种方式,参数配置得当可以大大提高系统的性能,也可以根据特定场景进行专门的优化,如TIME_WAIT过高,DDOS攻击等等. 如下配置是写在sysctl.con ...

  10. php就业网版本已改版成功

    php就业网简介:www.php91.net,专注于Thinkphp框架教程的php框架学习中心.同时也有小崔老师自学php的教程,与你一起成长哦 同时,php就业网教程部分:http://www.p ...