Обрезать пробелы от начала и конца строки
Я пытаюсь найти способ обрезать пробелы с начала и конца строки заголовка. Я использовал это, но он, похоже, не работает:
title = title.replace(/(^[\s]+|[\s]+$)/g, '');
Любые идеи?
Ответы
Ответ 1
Примечание: с 2015 года все основные браузеры (включая IE >= 9) поддерживают String.prototype.trim(). Это означает, что для большинства случаев просто выполнение str.trim()
- лучший способ достичь того, что задает вопрос.
Стивен Левитан проанализировал много разных реализаций trim
в Javascript с точки зрения производительности.
Его рекомендация:
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;
}
", если вы хотите обрабатывать длинные строки исключительно быстро во всех браузерах".
Ссылки
Ответ 2
Если использование 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);
Ответ 3
Как упоминалось @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();
Ответ 4
Я знаю, что это старый пост, но я просто решил поделиться своим решением. В поисках кратчайшего кода (не все просто любят красное регулярное выражение), вместо этого можно использовать:
title = title.replace(/(^\s+|\s+$)/g, '');
BTW: Я пропустил этот же тест по ссылке, которая была выше blog.stevenlevithan.com - Быстрее JavaScript Trim, и этот шаблон избил все остальные HANDS!!
Используя IE8, добавлен тест как test13. Результаты:
Оригинальная длина: 226002
trim1:110 мс (длина: 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)
Ответ 5
ECMAScript 5 поддерживает trim
, и это было реализовано в Firefox.
trim - MDC
Ответ 6
Здесь это должно делать все, что вам нужно
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 "));
Ответ 7
Вот некоторые методы, которые я использовал в прошлом, чтобы обрезать строки в 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);
}
Ответ 8
Вот мой текущий код, вторая строка работает, если я прокомментирую третью строку, но не работаю, если я оставлю ее как она.
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, '-');
Ответ 9
Просто используйте метод string.trim()
. Он поддерживается всеми основными браузерами.
Ссылка здесь: http://www.w3schools.com/jsref/jsref_trim_string.asp
Ответ 10
jQuery.trim( "привет, как дела?" );
:)
Ответ 11
Когда DOM полностью загружен, вы можете добавить это ко всем текстовым полям. У меня никогда не было ситуации, когда мне нужно было представить ведущее или конечное пространство, поэтому все это время для меня работало во всем мире...
$(function() { $('input[type=text]').on('blur', function(){
$(this).val($.trim($(this).val()));
});
});
Ответ 12
Это то, что предлагает JavaScript Architect/Guru Douglas Crockford.
String.method('trim', function ( ) {
return this.replace(/^\s+|\s+$/g, '');
});
Примечание. Вы должны определить "метод" для Function.prototype.
В качестве альтернативы
String.prototype.trim = function () {
return this.replace(/^\s+|\s+$/g, '');
};
title.trim(); // returns trimmed title
Наблюдение
В последних браузерах метод обрезки по умолчанию включен. Поэтому вам не нужно явно его добавлять.
Основные браузеры Chrome, Firefox, Safari и т.д. поддерживает метод обрезки.
Проверено в Chrome 55.0.2883.95 (64-разрядная версия), Firefox 51.0.1 (64-разрядная версия), Safari 10.0 (12602.1.50.0.10).
Ответ 13
рекурсивная попытка для этого
function t(k){
if (k[0]==' ') {
return t(k.substr(1,k.length));
} else if (k[k.length-1]==' ') {
return t(k.substr(0,k.length-1));
} else {
return k;
}
}
вызывайте так:
t(" mehmet "); //=>"mehmet"
если вы хотите отфильтровать spesific chars, вы можете определить строку списка в основном:
function t(k){
var l="\r\n\t "; //you can add more chars here.
if (l.indexOf(k[0])>-1) {
return t(k.substr(1,k.length));
} else if (l.indexOf(k[k.length-1])>-1) {
return t(k.substr(0,k.length-1));
} else {
return k;
}
}
Ответ 14
var word=" testWord "//add here word or space and test
var x=$.trim(word);
if(x.length>0)
{
alert('word');
}
else{
alert('spaces');
}