Обрезать пробелы от начала и конца строки

Я пытаюсь найти способ обрезать пробелы с начала и конца строки заголовка. Я использовал это, но он, похоже, не работает:

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, '-');

Ответ 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');
}