JavaScript中的修剪字符串

如何删除字符串开头和结尾的所有空格?

886597 次浏览

很多实现可以使用。最明显的似乎是这样的:

String.prototype.trim = function() {return this.replace(/^\s+|\s+$/g, "");};
" foo bar ".trim();  // "foo bar"

简单的版本JavaScript trim的一般函数是什么?

function trim(str) {return str.replace(/^\s+|\s+$/g,"");}

如果您已经在使用该框架,那么jQuery的修剪很方便。

$.trim('  your string   ');

我倾向于经常使用jQuery,所以用它修剪字符串对我来说很自然。但有可能对jQuery产生反弹?:)

自IE9+以来的所有浏览器都有#0字符串方法:

" \n test \n ".trim(); // returns "test" here

对于那些不支持trim()的浏览器,您可以使用MDN中的这个Poly填充:

if (!String.prototype.trim) {(function() {// Make sure we trim BOM and NBSPvar rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;String.prototype.trim = function() {return this.replace(rtrim, '');};})();}

也就是说,如果使用jQuery,则$.trim(str)也可用并处理未定义/null。


看这个:

String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g, '');};
String.prototype.ltrim=function(){return this.replace(/^\s+/,'');};
String.prototype.rtrim=function(){return this.replace(/\s+$/,'');};
String.prototype.fulltrim=function(){return this.replace(/(?:(?:^|\n)\s+|\s+(?:$|\n))/g,'').replace(/\s+/g,' ');};

公然的恶棍有11个不同的修剪与基准信息:

http://blog.stevenlevithan.com/archives/faster-trim-javascript

基于regexp的速度比传统循环慢。


这是我的个人代码。这段代码很旧!我是为JavaScript1.1和Netscape 3编写的,从那以后只稍微更新了一下。(原始使用String.charAt)

/***  Trim string. Actually trims all control characters.*  Ignores fancy Unicode spaces. Forces to string.*/function trim(str) {str = str.toString();var begin = 0;var end = str.length - 1;while (begin <= end && str.charCodeAt(begin) < 33) { ++begin; }while (end > begin && str.charCodeAt(end) < 33) { --end; }return str.substr(begin, end - begin + 1);}

如果您使用的是jQuery,请使用jQuery.trim()函数。例如:

if( jQuery.trim(StringVariable) == '')

尽管上面有一堆正确的答案,但应该注意的是,JavaScript中的String对象从ECMAScript 5开始就有一个原生的.trim()方法。因此,理想情况下,任何尝试原型化trim方法的尝试都应该首先检查它是否已经存在。

if(!String.prototype.trim){String.prototype.trim = function(){return this.replace(/^\s+|\s+$/g,'');};}

原生添加在:JavaScript 1.8.1/ECMAScript 5

因此支持:

Firefox:3.5+

Safari:5+

Internet Explorer:IE9+(仅在标准模式下!)http://blogs.msdn.com/b/ie/archive/2010/06/25/enhanced-scripting-in-ie9-ecmascript-5-support-and-more.aspx

Chrome:5+

Opera:10.5+

ECMAScript 5支持表:http://kangax.github.com/es5-compat-table/

我知道这个问题三年前就被问过了。现在,String.trim()是在JavaScript中本地添加的。例如,您可以直接修剪如下,

document.getElementById("id").value.trim();

mine使用单个regex来查找需要修剪的情况,并使用该regex的结果来确定所需的子字符串边界:

var illmatch= /^(\s*)(?:.*?)(\s*)$/function strip(me){var match= illmatch.exec(me)if(match && (match[1].length || match[2].length)){me= me.substring(match[1].length, p.length-match[2].length)}return me}

进入这个的一个设计决策是使用子字符串来执行最终捕获。s/\?:// (进行中期捕获),替换片段变成:

    if(match && (match[1].length || match[3].length)){me= match[2]}

我在这些impls中做了两个性能赌注:

  1. 子字符串实现是否复制原始字符串的数据?如果是,在第一个,当字符串需要修剪时,有一个双遍历,首先在正则表达式中(希望可能是部分的),第二个在子字符串提取中。希望子字符串实现只引用原始字符串,所以像substring这样的操作几乎是免费的。交叉手指

  2. 中间项,产出值,可能会很长.我还没有准备好银行,所有正则表达式的捕获不会在几百KB的输入捕获,但我也没有测试(太多的运行时,对不起!).

不知道这里隐藏了什么错误,但我用这个:

var some_string_with_extra_spaces="   goes here    "console.log(some_string_with_extra_spaces.match(/\S.*\S|\S/)[0])

或者,如果文本包含输入:

console.log(some_string_with_extra_spaces.match(/\S[\s\S]*\S|\S/)[0])

另一个尝试:

console.log(some_string_with_extra_spaces.match(/^\s*(.*?)\s*$/)[1])

我有一个使用trib的库。所以使用以下代码解决了它。

String.prototype.trim = String.prototype.trim || function(){ return jQuery.trim(this); };

使用原生JavaScript方法:#0#1#2


IE9+和所有其他主要浏览器中支持String.trim()

'  Hello  '.trim()  //-> 'Hello'


String.trimLeft()String.trimRight()是非标准的,但在所有主流浏览器除了IE中得到支持

'  Hello  '.trimLeft()   //-> 'Hello  ''  Hello  '.trimRight()  //-> '  Hello'


IE支持很容易,但是使用Poly填充:

if (!''.trimLeft) {String.prototype.trimLeft = function() {return this.replace(/^\s+/,'');};String.prototype.trimRight = function() {return this.replace(/\s+$/,'');};if (!''.trim) {String.prototype.trim = function() {return this.replace(/^\s+|\s+$/g, '');};}}
String.prototype.trim = String.prototype.trim || function () {return this.replace(/^\s+|\s+$/g, "");};
String.prototype.trimLeft = String.prototype.trimLeft || function () {return this.replace(/^\s+/, "");};
String.prototype.trimRight = String.prototype.trimRight || function () {return this.replace(/\s+$/, "");};
String.prototype.trimFull = String.prototype.trimFull || function () {return this.replace(/(?:(?:^|\n)\s+|\s+(?:$|\n))/g, "").replace(/\s+/g, " ");};

无耻地偷了Matt duereg

对于IE9+和其他浏览器

function trim(text) {return (text == null) ? '' : ''.trim.call(text);}

在TypeScript中:

var trim: (input: string) => string = String.prototype.trim? ((input: string) : string => {return (input || "").trim();}): ((input: string) : string => {return (input || "").replace(/^\s+|\s+$/g,"");})

如果本机原型不可用,它将回退到正则表达式。

早在2008年. trim()函数在JS中不可用时,我就为trim编写了这个函数。一些较旧的浏览器仍然不支持. trim()函数,我希望这个函数可以帮助某人。

修剪功能

function trim(str){var startpatt = /^\s/;var endpatt = /\s$/;
while(str.search(startpatt) == 0)str = str.substring(1, str.length);
while(str.search(endpatt) == str.length-1)str = str.substring(0, str.length-1);
return str;}

补充说明:函数trim()接受一个字符串对象并删除任何起始和尾随空格(空格、制表符和换行符)并返回修剪后的字符串。您可以使用此函数修剪表单输入以确保发送有效数据。

作为示例,可以以下述方式调用该函数。

form.elements[i].value = trim(form.elements[i].value);

来自角js 项目的修剪代码

var trim = (function() {
// if a reference is a `String`.function isString(value){return typeof value == 'string';}
// native trim is way faster: http://jsperf.com/angular-trim-test// but IE doesn't have it... :-(// TODO: we should move this into IE/ES5 polyfill
if (!String.prototype.trim) {return function(value) {return isString(value) ?value.replace(/^\s*/, '').replace(/\s*$/, '') : value;};}
return function(value) {return isString(value) ? value.trim() : value;};
})();

并称之为trim(" hello ")

使用简单的代码

var str = "       Hello World!        ";alert(str.trim());

浏览器支持

Feature         Chrome  Firefox Internet Explorer   Opera   Safari  EdgeBasic support   (Yes)   3.5     9                   10.5    5       ?

对于旧浏览器添加原型

if (!String.prototype.trim) {String.prototype.trim = function () {return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');};}

这里有一个非常简单的方法:

function removeSpaces(string){return string.split(' ').join('');}

您可以使用纯JavaScript来完成:

function trimString(str, maxLen) {if (str.length <= maxLen) {return str;}var trimmed = str.substr(0, maxLen);return trimmed.substr(0, trimmed.lastIndexOf(' ')) + '…';}
// Let's test it
sentenceOne = "too short";sentencetwo = "more than the max length";
console.log(trimString(sentenceOne, 15));console.log(trimString(sentencetwo, 15));