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