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); 
    } 
} 

完。
 
posted @ 2020-08-10 11:52  queenDream  阅读(758)  评论(0编辑  收藏  举报