如何修剪JavaScript中的字符串?
String.trim()
在Node.js中开箱即用也可以正常工作。
String.trim()
类方法在ES5 / Node.js中不存在;而是String.prototype.trim()
存在实例方法。用法:' foo '.trim()
,不是String.trim(' foo ')
。
$.trim(str)
中始终可用。
如何修剪JavaScript中的字符串?
String.trim()
在Node.js中开箱即用也可以正常工作。
String.trim()
类方法在ES5 / Node.js中不存在;而是String.prototype.trim()
存在实例方法。用法:' foo '.trim()
,不是String.trim(' foo ')
。
$.trim(str)
中始终可用。
Answers:
自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, '');
};
})();
}
也就是说,如果使用jQuery
,$.trim(str)
也可以使用,并且可以处理undefined / 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,' ');};
$.trim(str)
中始终可用。
如果您已经在使用该框架,则使用jQuery修剪会很方便。
$.trim(' your string ');
我倾向于经常使用jQuery,因此使用它修剪字符串对我来说很自然。但是可能还有反对jQuery的强烈反对吗?:)
尽管上面有很多正确答案,但是应该注意,String
JavaScript 中的对象.trim()
从ECMAScript 5开始具有本机方法。因此,理想情况下,对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
铬:5+
歌剧:10.5+
ECMAScript 5支持表:http : //kangax.github.com/es5-compat-table/
这里的简单版本JavaScript修剪的一般功能是什么?
function trim(str) {
return str.replace(/^\s+|\s+$/g,"");
}
我知道这个问题已经三年前问过了,现在String.trim()
是在JavaScript 中原生添加的。例如,您可以直接进行如下修剪,
document.getElementById("id").value.trim();
公然的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, '');
};
}
}
trimLeft
或trimRight
。
lTrim()
和rTrim()
方法组成。
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无耻地偷走了。
从angular 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 Edge
Basic 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, '');
};
}
replace
。我没有完全明白。您想再解释一下regexp部分吗?
这是一个非常简单的方法:
function removeSpaces(string){
return string.split(' ').join('');
}
trim
应该只删除开头和结尾的空格(包括制表符和其他字符)。而是删除所有空格,包括中间的空格。
您可以将变量声明为字符串并使用其trim函数:
var str = new String('my string');
str= str.trim();
如今,几乎所有浏览器都支持String.prototype.trim()
。
您可以这样使用它:
var origStr = ' foo ';
var newStr = origStr.trim(); // Value of newStr becomes 'foo'
如果您仍然需要支持不支持此功能的旧版浏览器,则这是MDN建议的polyfill:
if (!String.prototype.trim) {
String.prototype.trim = function () {
return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
};
}
if(!String.prototype.trim){
String.prototype.trim = function(){
return this.replace(/^\s+|\s+$/gm,'');
};
}
与之前的答案不同,添加标志 m
。
标志m
将搜索几个线性的文本。在此模式下,模式的开始和结束标记(^
$
)插入在换行符(\n
)之前和之后。
您可以使用普通的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));
现在trim()内置在javascript中。
let yourName = ' something ';
let actualTrimmedName = yourName.trim();
只是控制台或打印代码,那么您的名字也会被修剪。
不知道什么错误可以隐藏在这里,但是我用这个:
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])
当.trim()函数在2008年以JS方式不可用时,我已经编写了此函数进行修整。一些较旧的浏览器仍然不支持.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);
我的程序使用单个正则表达式查找需要修整的情况,并使用该正则表达式的结果确定所需的子字符串范围:
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]
}
在这些展示次数中我做了两个性能方面的押注:
子字符串实现会复制原始字符串的数据吗?如果是这样,首先,当需要修剪字符串时,会进行两次遍历,首先是在正则表达式中(可能希望是局部的),然后是子字符串提取中的第二种遍历。希望子字符串实现仅引用原始字符串,因此子字符串之类的操作几乎是免费的。交叉手指
正则表达式中的捕获效果有多好?中间值,即输出值,可能会很长。我还没有准备好所有正则表达式的捕获都不会阻止数百KB的输入捕获,但是我也没有进行测试(运行时太多,对不起!)。第二个总是进行捕获;如果您的引擎可以做到这一点而不会受到打击,那么也许可以使用上述一些字符串编排技术来确保使用它!