JS 字符串去除前后空格 trim(十四)

本文详细介绍了在JavaScript中去除字符串两端及特定位置空格的多种方法,包括传统函数实现、正则表达式替换、原型扩展以及jQuery和现代JS内置方法,适合不同需求和技能水平的开发者。

爱一个人是一回事,拥有一个人是另外一回事,爱上并拥有一个人,更是另外一回事。 蝴蝶,是什么,是希望,是真正的希望。

上一章简单介绍了Select的option 中填充其他属性值(十三),如果没有看过,请观看上一章

一. 去除空格trim() 方法

在Java 语言中,String 类中有一个trim() 去除左右空格的方法, 在JS中,以前是没有这样的方法的,需要自己手动书写,现在有了,但是这个trim() 方法,还是要理解的,所以总结归纳一下。

二. 比较笨的 前面去空格的方法。

一看例子就明白。

二.一 去除左空格 ltrim()

function ltrim(str){
	if(str==""||str==undefined){
		return "";
	}
	var n=0;
	for(var i=0,length=str.length;i<length;i++){
		var c=str.charAt(i);
		if(c!=" "){ //如果为空,就将索引继续添加。 里面有一个空格。
			break;
		}
		n++;
	}
	return str.substring(n);
}

二.二 去除右空格 rtrim()

function rtrim(str){
	if(str==""||str==undefined){
		return "";
	}
	var n=str.length;
	for(var i=str.length-1;i>=0;i--){
		var c=str.charAt(i);
		if(c!=" "){ //如果为空,就将索引继续添加。
			break;
		}
		n--;
	}
	return str.substring(0,n);
}

二.三 去除左右空格 trim()

function trim(str){
	return rtrim(ltrim(str));
}

这种方式不太好。

var name="   你好,  我要去空格     ";
console.log("去除左空格是:"+ltrim(name)+",结束");
console.log("去除右空格是:"+rtrim(name)+",结束");
console.log("去除左右空格是:"+trim(name)+",结束");

验证为:
在这里插入图片描述
注意,不会去除掉字符串中间的空格。

三. 正则表达式验证

主要是将不可见字符替换成"" . (中间没有空格)

function ltrim(str){
	// \s 为任意的空白符.  包括空格,换行符,制表 符,换页符  。 \f\n\r\t\v
	return str.replace(/(^\s*)/g,"");
}
function rtrim(str){
	return str.replace(/(\s*$)/g,"");
}
function trim(str){
	return str.replace(/(^\s*)|(\s*$)/g,"");
}

也可以:

function trim(str) {
	if (str == null) {
	    return "";
	}
	return str.replace(/^\s*(.*?)[\s\n]*$/g,'$1');   
}

四. JS中String 类扩展

利用原型,进行相应的扩展。

		String.prototype.ltrim=function(){
	      return this.replace(/(^\s*)/g,"");
	   }
	   String.prototype.rtrim=function(){
	      return this.replace(/(\s*$)/g,"");
	   }
		String.prototype.trim=function(){
	      return this.replace(/(^\s*)|(\s*$)/g, "");
	   }

这样,就可以直接

var name="    张三    " .trim(); 

即可,仿佛是js 中字符串的方法。 (虽然现在JS已经提供了)

五. Jquery 中的trim() 方法。

$.trim(字符串) 方法。

var name="   你好,  我是jquery去除空格     ";
console.log("去除左右空格是:"+$.trim(name)+",结束");

在这里插入图片描述

六. JS 新提供的方法

提供了五个方法。
在这里插入图片描述

var name="   你好,  我是js新提供去除空格     ";
console.log("去除左右空格是:"+name.trim()+",结束");
console.log("去除左空格是:"+name.trimLeft()+",结束");
console.log("去除右空格是:"+name.trimRight()+",结束");
console.log("去除开始空格是:"+name.trimStart()+",结束");
console.log("去除结束空格是:"+name.trimEnd()+",结束");

在这里插入图片描述
trimLeft() 与trimStart() 方法一致, trimRight() 与trimEnd() 方法一致。
可以直接使用JS自带的方法。

谢谢!!!

<think>我们参考了引用[1]中提供的trim函数,该函数通过循环检查字符串开头和结尾是否有空格,并逐步去除。但这种方法效率较低,且现代JavaScript已有更简洁的内置方法。 此外,用户实际上想要的是去除字符串前后空格方法,这与之前的输入框实时处理空格和回车的问题不同。因此,我们需要提供专门用于处理字符串前后空格方法。 以下是几种常见的去除字符串前后空格方法: 1. 使用String.prototype.trim()方法(ES5标准方法,推荐) 2. 使用正则表达式 3. 自定义函数(如引用[1]中的方法,但不推荐,因为效率低且复杂) 我们将重点介绍前两种,尤其是第一种标准方法。 注意:用户可能还需要兼容低版本浏览器(如IE8及以下),所以在不支持trim方法的情况下,我们需要提供替代方案。 方法一:使用原生trim() 这是最简单且推荐的方法,它会去除字符串两端的空白字符(包括空格、制表符、换行符等)。 示例: ```javascript let str = " Hello World! "; let trimmedStr = str.trim(); console.log(trimmedStr); // "Hello World!" ``` 方法二:使用正则表达式 如果不支持trim()(如低版本IE),我们可以用正则表达式替换。 示例: ```javascript let str = " Hello World! "; let trimmedStr = str.replace(/^\s+|\s+$/g, ''); console.log(trimmedStr); // "Hello World!" ``` 解释正则表达式: - `^\s+`:匹配开头的一个或多个空白字符 - `|`:或 - `\s+$`:匹配结尾的一个或多个空白字符 - `g`:全局匹配(但这里实际上只需要一次,因为开头和结尾各一次,不过加上g也无妨) 方法三:自定义函数(不推荐,除非有特殊需求) 如引用[1]中的函数,但我们可以写一个更简洁的版本: ```javascript function trim(str) { // 如果支持原生的trim,则直接使用 if (String.prototype.trim) { return str.trim(); } // 否则使用正则 return str.replace(/^\s+|\s+$/g, ''); } ``` 但是,考虑到兼容性,现在绝大多数浏览器都支持trim(),包括IE9+。如果需要支持IE8及以下,则可以采用上述正则方法。 总结:优先使用trim()方法,如果考虑兼容性,则使用正则表达式方法。 因此,我们给出如下建议: 代码示例: ```javascript // 现代浏览器(推荐) let cleanStr = yourString.trim(); // 兼容旧浏览器 let cleanStr = yourString.replace(/^\s+|\s+$/g, ''); ``` 另外,如果只需要去除左边或右边的空格,可以使用以下方法: 1. 去除左边空格:`str.replace(/^\s+/, '')` 2. 去除右边空格:`str.replace(/\s+$/, '')` 相关问题: 1. 如何去除字符串中所有空格(包括中间的空格)? 2. 如何兼容低版本浏览器实现trim功能? 3. 去除字符串前后空格在哪些场景下是必要的? 注意:在回答中,我们引用了引用[1]中提供的自定义函数,但指出其效率较低,并推荐使用原生方法或正则表达式。 </think>### JavaScript 去除字符串前后空格的常用方法JavaScript 中,去除字符串前后空格有多种高效方法。以下是五种常用方法(推荐前三种现代方法),包括您引用[1]中的自定义函数及其优化建议: #### 1. 使用原生 `trim()` 方法 (推荐) ```javascript const str = " Hello World! "; const trimmed = str.trim(); console.log(trimmed); // "Hello World!" ``` - **优点**:ES5 标准方法,简洁高效,去除所有空白符(包括空格、制表符、换行符等) - **兼容性**:所有现代浏览器及 IE9+[^1] #### 2. 正则表达式替换 (兼容旧浏览器) ```javascript const str = " Hello World! "; const trimmed = str.replace(/^\s+|\s+$/g, ''); console.log(trimmed); // "Hello World!" ``` - **正则说明**: - `^\s+`:匹配开头的一个或多个空白符 - `|\s+$`:或匹配结尾的一个或多个空白符 - **兼容性**:全浏览器支持 #### 3. 三元运算符优化版 (ES6+) ```javascript const trim = str => str ? str.replace(/^\s+|\s+$/g, '') : ''; console.log(trim(" Hello ")); // "Hello" ``` - **优点**:防止处理 `null` 和 `undefined` 时报错 #### 4. 引用[1]中的自定义函数 (优化版) ```javascript function trim(param) { if (!param) return ''; let vRet = param; while (true) { if (vRet.startsWith(' ')) { vRet = vRet.substring(1); } else if (vRet.endsWith(' ')) { vRet = vRet.substring(0, vRet.length - 1); } else { return vRet; } } } ``` **优化说明**: 1. 使用 `startsWith()`/`endsWith()` 替代 `indexOf()` 更直观 2. 简化 `substring()` 参数 3. 添加空值保护 `if (!param) return ''` 4. 去除冗余的长度判断 #### 5. 仅去除首或尾空格 ```javascript // 去除首部空格 const trimStart = str => str.replace(/^\s+/, ''); // 去除尾部空格 const trimEnd = str => str.replace(/\s+$/, ''); ``` ### 方法比较 | 方法 | 代码简洁度 | 性能 | 兼容性 | 推荐度 | |--------------------|------------|--------|--------------|--------| | `str.trim()` | ★★★★★ | ★★★★★ | IE9+ | 首选 | | 正则替换 | ★★★★☆ | ★★★★☆ | 全浏览器 | 次选 | | 自定义函数 | ★★☆☆☆ | ★★☆☆☆ | 全浏览器 | 特殊场景 | | ES6 箭头函数 | ★★★★★ | ★★★★☆ | 现代浏览器 | 推荐 | ### 使用建议 1. **现代项目**:优先使用原生 `trim()` 2. **旧浏览器兼容**:使用正则替换法 3. **特殊需求**: - 仅需去除头部空格 → `trimStart()` 或 `replace(/^\s+/, '')` - 保留中间空格 → 上述方法均适用 - 需要兼容 `null`/`undefined` → 三元运算符版 > 示例:表单提交前的数据清洗 > ```javascript > document.querySelector('form').addEventListener('submit', (e) => { > const input = document.getElementById('username'); > input.value = input.value.trim(); // 去除前后空格 > }); > ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

两个蝴蝶飞

你的鼓励,是老蝴蝶更努力写作的

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值