问题说明了一切。JS似乎没有本地的trim()方法。
我知道这个问题很古老,但是现在,JavaScript实际上确实有一个本地的.trim()
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/Trim
jQuery的最短形式:
string = $.trim(string);
根据此页面,最佳的全方位方法是
return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
当然,如果您使用的是jQuery,它将为您提供优化的修剪方法。
好吧,正如很多人经常说的那样,trim功能运行得很好,但是如果您不想仅仅使用整个框架来执行修剪,那么看看它的实现可能会很有用。所以这里是:
function( text ) { return (text || "").replace( /^(\s|\u00A0)+|(\s|\u00A0)+$/g, "" );}
与这里已经提出的其他解决方案相比,我在此实现中看到的主要优点是:
- “ g”标志可让您在多行字符串上进行修剪
- (text ||“”)语法确保即使传递的参数为null或未定义,该函数也将始终有效。
正如其他一些人已经指出的那样,通常最好使用第三方JS库来完成这种事情。不是说trim()是一个构建自己的复杂函数,而是您可能不需要太多的JavaScript原生函数,并最终编写自己,所以使用库很快变得更具成本效益。
当然,使用JS库的另一个优点是,作者做了艰苦的工作,以确保这些功能可以在所有主要浏览器上正常工作,以便您可以编写标准接口的代码,而不必担心Internet Explorer与所有其他浏览器。
@Pat的略微版本。
return str.replace( /^\s+|\s+$/g, '' );
对于ltrim,将字符串开头的空格替换为空:
str2 = str.replace(/^\s+/,'');
对于rtrim,将字符串末尾的空格替换为空:
str2 = str.replace(/\s+$/,'');
修剪:
str2 = str.replace(/^\s+|\s+$/g,'');
这些都使用正则表达式来完成实际工作。
为什么不修改String原型呢?为什么不像我在YUI那样从开源库中窃取修整功能?(您真的需要为此简单的任务加载整个框架吗?)将它们放在一起,您会得到:
String.prototype.trim = function() {
try {
return this.replace(/^\s+|\s+$/g, "");
} catch(e) {
return this;
}
}
var s = " hello ";
alert(s.trim() == "hello"); // displays true
// 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 );
};
我的解决方案是这样的(因为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 );
};
我考虑了微调功能的速度。此功能明显击败了所有24个竞争对手(其中许多使用正则表达式)以及Chrome和Chromium(!)的本机string.trim(),并且性能与Safari的trim()一样快。测试结果在这里: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”,但添加更多的空白字符很容易,例如。那些将regexp用作空格(\ s)的文件,但只损失很小的性能(请参阅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一起使用
// 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());
例
// 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 str = " some text ";
console.log(str.trim());
众多JavaScript问题的答案:jQuery
$j.trim(string)
注意:以上假设您的jQuery已设置为:
<script type="text/javascript">$j = jQuery.noConflict();</script>
它比“ $”更明智,比每次键入“ jQuery”都更冗长。
Microsoft .NET还具有String.trim函数,作为JavaScript基本类型扩展的一部分。如果您正在编码ASP.NET应用程序,则可以使用它。
我用这个
String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/g,"");
}
实际上,使用jQuery似乎是这样:
jQuery.trim(string)
我用这个:
使用功能。
function trim($) {
return (typeof $ == "function" ? $() : $).replace(/[\s]*/g,"")
}
code example:
trim((function(){ return "a b"})) // ab
trim(" a b") //ab
这可能不是最快的,可能会违反“ .trim()”的含义,但我不喜欢RegExs(主要是因为花了很多时间才能弄清它们的真正含义/作用),我喜欢无论我是否安装了jQuery,知道的东西都可以使用(更不用说正确的版本了,因为我在jQuery 1.4.2中尝试了$ .trim(myVar),但它不起作用),并且将摆脱所有多余的空间,而不仅仅是在结尾处,应该像这样重建它:
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为=开始日期。
$("#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;
}
}
文章标签:javascript , jquery , string
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!
评论已关闭!