我正试图找到一种方法来删除标题字符串开头和结尾的空格。我正在使用以下代码,但似乎并不起作用:
title = title.replace(/(^[\s]+|[\s]+$)/g, '');
任何想法?我正试图找到一种方法来删除标题字符串开头和结尾的空格。我正在使用以下代码,但似乎并不起作用:
title = title.replace(/(^[\s]+|[\s]+$)/g, '');
任何想法?str.trim()
是实现问题所需的最佳方法。
Steven Levithan分析了许多不同的JavaScript中trim
实现的性能。
他的建议是:
function trim1 (str) {
return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}
对于“通用实现,快速跨浏览器”,
function trim11 (str) {
str = str.replace(/^\s+/, '');
for (var i = str.length - 1; i >= 0; i--) {
if (/\S/.test(str.charAt(i))) {
str = str.substring(0, i + 1);
break;
}
}
return str;
}
"如果你想在所有浏览器中异常快速地处理长字符串"
String.prototype.trim = String.prototype.trim || function trim() { return this.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); };
这段代码的意思是,如果当前环境中不存在String.prototype.trim
方法,那么就定义一个trim
方法。该方法用于去除字符串前后的空格,并返回处理后的字符串。 - kojiro/^\s\s*/
而不是这个 /^\s*/
? - aemongetrim1
和 trim11
? - Marty Cortez如果可以使用jQuery:
/**
* Trim the site input[type=text] fields globally by removing any whitespace from the
* beginning and end of a string on input .blur()
*/
$('input[type=text]').blur(function(){
$(this).val($.trim($(this).val()));
});
或者简单地:
$.trim(string);
正如@ChaosPandion所提到的,String.prototype.trim
方法已经被引入ECMAScript 5th Edition规范,一些实现已经包括了该方法,所以最好的方法是检测本地实现并仅在其不可用时声明它:
if (typeof String.prototype.trim != 'function') { // detect native implementation
String.prototype.trim = function () {
return this.replace(/^\s+/, '').replace(/\s+$/, '');
};
}
然后你可以简单地执行以下操作:
title = title.trim();
String.prototype.trim
不是一个函数,那它就不是ECMAScript第5版规范中描述的String.prototype.trim
方法。规范保证在ES5环境中,trim
是一个函数对象。 - Christian C. Salvadó我知道这是一个旧帖子,但我想分享我们的解决方案。在追求最短代码的过程中(不是每个人都喜欢简洁的正则表达式吗?),人们可以使用以下代码:
title = title.replace(/(^\s+|\s+$)/g, '');
顺便说一下:我通过上面分享的链接(blog.stevenlevithan.com -- Faster JavaScript Trim)运行了相同的测试,这个模式在所有其他方式中都表现得最好!
在IE8中进行了测试,将其作为测试13。结果如下:
原长度:226002
trim1:110ms(长度:225994)
trim2:79ms(长度:225994)
trim3:172ms(长度:225994)
trim4:203ms(长度:225994)
trim5:172ms(长度:225994)
trim6:312ms(长度:225994)
trim7:203ms(长度:225994)
trim8:47ms(长度:225994)
trim9:453ms(长度:225994)
trim10:15ms(长度:225994)
trim11:16ms(长度:225994)
trim12:31ms(长度:225994)
trim13:0ms(长度:226002)
这里,这应该能满足你的所有需求。
function doSomething(input) {
return input
.replace(/^\s\s*/, '') // Remove Preceding white space
.replace(/\s\s*$/, '') // Remove Trailing white space
.replace(/([\s]+)/g, '-'); // Replace remaining white space with dashes
}
alert(doSomething(" something with some whitespace "));
以下是我过去在js中使用的一些字符串修剪方法:
String.prototype.ltrim = function( chars ) {
chars = chars || "\\s*";
return this.replace( new RegExp("^[" + chars + "]+", "g"), "" );
}
String.prototype.rtrim = function( chars ) {
chars = chars || "\\s*";
return this.replace( new RegExp("[" + chars + "]+$", "g"), "" );
}
String.prototype.trim = function( chars ) {
return this.rtrim(chars).ltrim(chars);
}
^[\s*]+
匹配字符串开头的 *
,因此您的函数可以将 "*** Foo"
截断为 "Foo"
。 - Ferdinand Beyer以下是我的当前代码,如果我注释掉第三行,第二行的代码可以运行,但如果保留它,就无法工作。
var page_title = $(this).val().replace(/[^a-zA-Z0-9\s]/g, '');
page_title = page_title.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
page_title = page_title.replace(/([\s]+)/g, '-');
只需使用 string.trim()
方法。所有主要浏览器都支持它。
参考链接: http://www.w3schools.com/jsref/jsref_trim_string.asp
当DOM完全加载时,您可以将此添加到所有文本字段中。我从未遇到过需要提交前导或尾随空格的情况,因此在全局范围内始终执行此操作对我有用...
$(function() { $('input[type=text]').on('blur', function(){
$(this).val($.trim($(this).val()));
});
});
blur
事件是否会在提交之前发生? - amenthes
.trim
,所以这是现代浏览器的答案:https://dev59.com/EnA75IYBdhLWcg3w-OZA#3000900 - Ziggyfunction trim11 (str) { str = str.replace(/^\s+/, ''); for (var i = str.length - 1; i >= 0; i--) { if (/\S/.test(str.charAt(i))) { str = str.substring(0, i + 1); break; } } return str; }
- Badri Gs