zoukankan      html  css  js  c++  java
  • JS验证中研制中文字数的解决方案

    input控件有个length的属性,可以方便地获取字数。可是,它所返回的字数无论是中文还是英文或者数字,1个字就算1个字。客户要限制字数的原因是为了页面显示的时候排版不会乱,因此一个汉字需要按2个英文字符来计算。这样的话,这个默认的length就无用武之地了。
    怎么区分中文和英文呢?

    string对象有一个叫charCodeAt(index)的方法,可以获取字符串中某一个字符的编码。我们都知道,字母数字的ascii编码都小于255而汉字的编码肯定大于255,因此我们可以使用此方法来判断字符串占用多少英文字符的宽度。 function GetCharLength(str)
    {
    var iLength = 0;
    for(var i = 0;i<str.length;i++)
    {
    if(str.charCodeAt(i) >255)
    {
    iLength += 2;
    }
    else
    {
    iLength += 1;
    }
    }
    return iLength;
    }

    字数统计有了,接下去我们需要实时地捕获用户的输入。我们可以采取在input文本框的onkeyup事件中加入字符串检测函数的调用即可。
    在检测完字符长度后,对于那些超长的,我们将采用自后往前截断的方法将多余的字符去除。
    字符截断代码如下: function CutStr(Str,Len)
    {
    var CurStr = "";
    for(var i = 0;i<Str.length;i++)
    {
    CurStr += Str.charAt(i);
    if(GetCharLength(CurStr )>Len)
    {
    return Str.substring(0,i);
    }
    }
    return CurStr ;
    }
    至此,一个简单的限制用户输入字符数的方案完成了。
    但是它并不完美。
    更完美的做法是使用正则
    javascript中,可以使用正则表达式来搜索字符串里的字符并替换,我们可以用此方法来获取字符串占用的宽度,代码如下: String.prototype.len=function(){
    return this.replace(/[^\x00-\xff]/g,"**").length;
    }
    这段代码为string对象建立了一个len的属性,用户可以直接使用string.len来获取字符串所占用的宽度。在这里,我们使用了一个小技巧,通过正则表达式将编码在255以外的字符换成2个*,这样就可以统计了。
    如:

    if (uname.len()>10){
                $("idTips").innerHTML=" 用户名长度超过限制";
           }
    ok,到此使用len属性就可以正确的判断中文字符长度了。

  • 相关阅读:
    EXTI—外部中断/事件控制器
    启动文件讲解
    SysTick—系统定时器
    USART—串口通讯
    关于引脚复用,不得不提的GPIO_Pin_sources 和GPIO_Pin
    DMA—直接存储区访问
    【LightOJ1282】Leading and Trailing(数论)
    【LightOJ1336】Sigma Function(数论)
    【LightOJ1370】Bi-shoe and Phi-shoe(欧拉函数)
    【BZOJ2440】完全平方数(二分答案,莫比乌斯反演)
  • 原文地址:https://www.cnblogs.com/yaojaa/p/1355803.html
Copyright © 2011-2022 走看看