如何修剪JavaScript中的字符串?
自IE9 +以来的所有浏览器都有trim()
.
对于那些不支持的浏览器trim()
,您可以使用MDN中的此polyfill :
if (!String.prototype.trim) { (function() { // Make sure we trim BOM and NBSP var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; String.prototype.trim = function() { return this.replace(rtrim, ''); }; })(); }
看到这个:
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,' ');};
如果您已经在使用该框架,那么jQuery的修剪很方便.
$.trim(' your string ');
我经常使用jQuery,因此使用它修剪字符串对我来说很自然.但是有可能在那里对jQuery产生强烈反对?:)
虽然上面有一堆正确的答案,但应该注意String
JavaScript 中的对象有一个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+
歌剧:10.5+
ECMAScript 5支持表:http://kangax.github.com/es5-compat-table/
有很多实现可以使用.最明显的似乎是这样的:
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,""); }
我知道这个问题已在三年前被问过了.现在,它String.trim()
是在JavaScript中本地添加的.例如,你可以直接修改如下,
document.getElementById("id").value.trim();
如果您使用的是jQuery,请使用该jQuery.trim()
功能.例如:
if( jQuery.trim(StringVariable) == '')
Flagrant Badassery有11种不同的装饰和基准信息:
http://blog.stevenlevithan.com/archives/faster-trim-javascript
令人惊讶的是基于正则表达式比传统循环慢.
这是我个人的.这段代码很旧!我为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); }
使用本地JavaScript方法:String.trimLeft()
,String.trimRight()
,和String.trim()
.
String.trim()
IE9 +和所有其他主流浏览器都支持:
' Hello '.trim() //-> 'Hello'
String.trimLeft()
并且String.trimRight()
是非标准的,但除了IE之外的所有主流浏览器都支持
' Hello '.trimLeft() //-> 'Hello ' ' Hello '.trimRight() //-> ' Hello'
然而,使用polyfill可以轻松支持IE:
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, ''); }; } }
现在,您可以使用本机Javascript实现的string.trim()
var orig = " foo "; console.log(orig.trim());//foo
也可以看看
trimLeft()
trimRight()
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无耻地偷走了.
修剪角度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 ")