zoukankan      html  css  js  c++  java
  • js中限制字符串输入中英文字符的长度封装

    /*
    * @method 是否限制字符串输入中英文字符的长度要求
    * @param {str} String: 输入的字符串
    * @param {num=16} Number: 限制字符串的长度,num默认值为16
    * callback:boolean true:符合;false:不符合
    */

    export function canPassLength(str,num=16) {
    judgeTypes(str) === 'number' ? ''+str : judgeTypes(str) === 'string' ? str : '';
    let len = 0;
     let character = str.replace(/' '/g, '');  //问题1
      let character = str.replace(/\s+/g, '');
    for (let i = 0; i < character.length; i++) {
    if (character.charAt(i).match(/[\u4e00-\u9fa5]/g) != null) len += 2;
    else len += 1;
    }
    if(len === 0 || len > num) return false
    return true
    }

    // 类型判断
    function judgeTypes (target) {
    return Object.prototype.toString.call(target).replace(/^\[object\s(\w+)\]$/, '$1').toLowerCase()
    }

    问题1:str.replace(/\s+/g, ''); 不可以写成str.replace(/' '/g, ''); 

    原因:空格不是单个英文空格或者中文空格(全角)
    发现:可以写作str.replace(/ /g, '');不加引号 




    扩展:JS 替换所有的空格

    NO.1: name.replace(" ","");

    上述方法是很简单的替换,但是有两个弱点:
    1.只能替换单个英文空格或者中文空格(全角);
    2.只能替换当前字符串的第一个匹配项。

    NO.2: name.replace(new RegExp(/( )/g),"");

    上述方法是通过正则匹配,能够进行全部替换,但是还是有一个弱点:
    1.只能替换英文空格或者中文空格(全角)中的一种。

    NO.3:name.split(" ").join("");

    上述方法是通过字符分隔再合并,能够进行全部替换,但是还是有一个弱点:
    1.只能替换英文空格或者中文空格(全角)中的一种。

    NO.4:name.replace(/(^\s*)|(\s*$)/g,"");

    上述方法是通过正则匹配,能够替换英文或者中文空格,但是有一个弱点:
    1.只能替换首尾的空格,对字符串中间的空格不起作用。

    终极杀招:name.replace(/\s+/g,"");

    上述方法是通过正则匹配,能够替换英文或者中文空格,并进行全部替换。

    【注意】JS中并没有所谓的replaceAll方法,经笔者测试结果“undefined”,页面上无法识别的。当然也有一种可迂回的方案,那就是根据replace的功能进行replaceAll方法原型重写:

    
    
    String.prototype.replaceAll = function(reallyDo, replaceWith, ignoreCase) { 
        if (!RegExp.prototype.isPrototypeOf(reallyDo)) { 
            return this.replace(new RegExp(reallyDo, (ignoreCase ? "gi": "g")), replaceWith); 
        } else { 
            return this.replace(reallyDo, replaceWith); 
        } 
    } 
    
    
    完。
     
  • 相关阅读:
    在Fedora10上安装MySQL5.0.18,告捷!
    直接修改class文件内容即使是文本会导致App异常,正确方式是修改java再用生成的class替换掉原有的class
    生命的真谛不在于你呼吸的次数,而在于那些令你无法呼吸的时刻
    开放Fedora10自带的MySQL5.0.67的对外数据库服务
    重装上了Fedora8自带的MySQL5.0.45,再试,告捷!!
    Shell程序荟萃
    程序的价值
    两条Find指令
    Linux防火墙配置
    在Foreda8上安装libaio-0.3.105-2.i386.rpm
  • 原文地址:https://www.cnblogs.com/queenDream/p/13468925.html
Copyright © 2011-2022 走看看