什么是在JavaScript中修剪()的最佳方式
这个问题说明了一切。 JS似乎没有一个本地trim()方法。
我知道这个问题是古老的,但现在,Javascript实际上有一个原生的.trim()
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim
最简单的jQueryforms:
string = $.trim(string);
链接
根据这个页面 ,最好的全面的方法是
return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
当然,如果你使用jQuery,它会为你提供一个优化的修剪方法。
那么,正如许多人总是说的那样,修剪function工作得很好,但是如果你不想使用整个框架来执行修剪,看看它的实现可能是有用的。 所以这里是:
function( text ) { return (text || "").replace( /^(\s|\u00A0)+|(\s|\u00A0)+$/g, "" );}
我在这个实现中看到的主要优点,与此处已经提出的其他解决scheme相比,是:
- 'g'标志允许您在多行string上执行修剪
- (text ||“”)语法确保函数始终有效,即使传递的参数为null或undefined。
正如其他一些人已经指出的那样,通过使用第三方JS库来做这种事情通常是最好的。 不是trim()是一个复杂的函数来构build自己,但是有太多的函数不是JavaScript原生的,你可能需要编写自己的代码,使用库很快就会变得更具成本效益。
当然,使用JS库的另一个好处是作者要确保这些function在所有主stream浏览器中都能正常工作,这样你就可以编写一个标准的接口,并且忘记Internet Explorer与所有浏览器其他浏览器。
@ Pat的稍微更小的版本。
return str.replace( /^\s+|\s+$/g, '' );
对于ltrim,用空白replacestring开始处的空格:
str2 = str.replace(/^\s+/,'');
对于rtrim,用空白replace掉在string末尾的空格:
str2 = str.replace(/\s+$/,'');
修剪:
str2 = str.replace(/^\s+|\s+$/g,'');
这些都使用正则expression式来做实际的工作。
为什么不只是修改string原型? 为什么不从开放源代码库中窃取修剪function,就像我在YUI那里一样? (你真的需要加载和这个简单的taks整个框架?)把它们放在一起,你得到这个:
String.prototype.trim = function() { try { return this.replace(/^\s+|\s+$/g, ""); } catch(e) { return this; } } var s = " hello "; alert(s.trim() == "hello"); // displays true
使用Ariel Flesler的快速修剪function :
// Licensed under BSD function myBestTrim( str ){ var start = -1, end = str.length; while( str.charCodeAt(--end) < 33 ); while( str.charCodeAt(++start) < 33 ); return str.slice( start, end + 1 ); };
我的解决scheme,但是,这将是(因为在Firefox 3.5及以上的string对象已经有一个trim
方法 ):
String.prototype.trim = String.prototype.trim || function () { var start = -1, end = this.length; while( this.charCodeAt(--end) < 33 ); while( this.charCodeAt(++start) < 33 ); return this.slice( start, end + 1 ); };
我提出了一个修剪function的速度。 这个function在所有24个竞争对手(其中许多使用正则expression式)以及Chrome和Chromium(!)的本地string.trim()中都有明显的区别,并且像Safari的trim()一样快。 testing结果在这里: http : //jsperf.com/mega-trim-test/7
function trim27(str) { var c; for (var i = 0; i < str.length; i++) { c = str.charCodeAt(i); if (c == 32 || c == 10 || c == 13 || c == 9 || c == 12) continue; else break; } for (var j = str.length - 1; j >= i; j--) { c = str.charCodeAt(j); if (c == 32 || c == 10 || c == 13 || c == 9 || c == 12) continue; else break; } return str.substring(i, j + 1); }
该函数修剪字符“\ n \ r \ t \ f”,但很容易添加更多的空白字符,例如。 那些正则expression式使用空格(\)只有一个小的性能丢失(请参阅http://jsperf.com/mega-trim-test/8 )。
编辑:以前的trim27()只修剪最常见的字符(“\ n \ r \ t \ f”),但为了修剪所有可能的空格,我在一个新函数mytrim()
if (!String.prototype.trim || "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF".trim() || navigator.userAgent.toString().toLowerCase().indexOf("chrome") != -1) var mytrim = function(str) { var c; for (var i = 0; i < str.length; i++) { c = str.charCodeAt(i); if (c == 32 || c == 10 || c == 13 || c == 9 || c == 12 || c == 11 || c == 160 || c == 5760 || c == 6158 || c == 8192 || c == 8193 || c == 8194 || c == 8195 || c == 8196 || c == 8197 || c == 8198 || c == 8199 || c == 8200 || c == 8201 || c == 8202 || c == 8232 || c == 8233 || c == 8239 || c == 8287 || c == 12288 || c == 65279) continue; else break; } for (var j = str.length - 1; j >= i; j--) { c = str.charCodeAt(j); if (c == 32 || c == 10 || c == 13 || c == 9 || c == 12 || c == 11 || c == 160 || c == 5760 || c == 6158 || c == 8192 || c == 8193 || c == 8194 || c == 8195 || c == 8196 || c == 8197 || c == 8198 || c == 8199 || c == 8200 || c == 8201 || c == 8202 || c == 8232 || c == 8233 || c == 8239 || c == 8287 || c == 12288 || c == 65279) continue; else break; } return str.substring(i, j + 1); }; else var mytrim = function(str) { return str.trim(); }
这样使用它:
var foo = mytrim(" \n \t Trimmed \f \n "); // foo is now "Trimmed"
上面的mytrim()执行以下操作:
- 修剪26个不同的空格( http://perfectionkills.com/whitespace-deviations/中提到的所有25个空格以及另外的uFEFF,它是零宽度非空格空格。;
- 使浏览器的裁剪结果保持一致。
- 如果可用,则使用本地trim(),并且可以修剪全部27个不同的空格。 Chrome和Chromium都是非常慢的原生trim(),而不是原生的,我们使用我们的自定义修剪。
- 最重要的是:不是很漂亮,并不短,但比http://jsperf.com/mega-trim-test/12中的24个竞争选项中的任何一个明显更快(例外:相当老的Firefox 3.6.25英寸Windows 7运行mytrim()相当慢,原因不明)。
这么多的JavaScript问题的答案:jQuery
$j.trim(string)
注意:上面假设你的jQuery已经被设置为:
<script type="text/javascript">$j = jQuery.noConflict();</script>
这比“$”更明智,而且比每次input“jQuery”要冗长得多。
Microsoft .NET也将String.trim函数作为JavaScript Base Type Extensions的一部分。 如果您正在编写ASP.NET应用程序,则可以使用它。
我用这个
String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g,""); }
我使用本机JavaScript
// Adding trim function to String object if its not there if(typeof String.prototype.trim !== 'function') { String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ''); } }
像这样使用
var myString = " some text "; alert(myString.trim());
其实,用jQuery看起来是这样的:
jQuery.trim(string)
(参考)
我使用这个:
使用function。
function trim($) { return (typeof $ == "function" ? $() : $).replace(/[\s]*/g,"") } code example: trim((function(){ return "ab"})) // ab trim(" ab") //ab
这可能不是最快的,可能违反“.trim()”可能应该是真正的,但是我不喜欢正则expression式(主要是因为花了很多时间来弄清楚他们真正的意思/做什么),而且我喜欢有我知道的东西会工作,无论我是否有jQuery(不提及正确的版本,因为我试过$ .trim(myVar)与jQuery 1.4.2,它不工作),并将摆脱所有额外的空间,不只是在最后,重build它应该是这样的:
function Trim(obj) { var coll = ""; var arrObj = obj.split(' '); for (var i=0;i<arrObj.length;i++) { if (arrObj[i] == "") { arrObj.splice(i,1); // removes array indices containing spaces } } //alert(arrObj.length); // should be equal to the number of words // Rebuilds with spaces in-between words, but without spaces at the end for (var i=0;i<arrObj.length;i++) { if (arrObj[i] != "" && i != arrObj.length-1) coll += arrObj[i] + " "; if (arrObj[i] != "" && i == arrObj.length-1) coll += arrObj[i]; } return coll; }
这是一个古老的问题,但没有一个为我工作。 我只需要修剪前后空白,这就是我所做的。 我的div标签有一个id =开始date。
$("#start-date").text().trim()
您可以使用以下…
function trim(str) { try { if (str && typeof(str) == 'string') { return str.replace(/^\s*|\s*$/g, ""); } else { return ''; } } catch (e) { return str; } }