Подтвердить что ты не робот

Каков наилучший способ обрезать() в javascript

В этом вопросе говорится все; JS, похоже, не имеет собственного метода trim().

4b9b3361

Ответ 2

Самая короткая форма для jQuery:

string = $.trim(string);

Ссылка

Ответ 3

в соответствии с этой страницей лучший подход во всем мире

return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');

Конечно, если вы используете jQuery, он предоставит вам оптимизированный метод подстройки.

Ответ 4

Ну, как много людей всегда говорят, функция обрезки работает очень хорошо, но если вы не хотите использовать всю фреймворк только для выполнения обрезки, может быть полезно взглянуть на ее реализацию. Итак, вот оно:

function( text ) { return (text || "").replace( /^(\s|\u00A0)+|(\s|\u00A0)+$/g, "" );}

Основные преимущества, которые я вижу в этой реализации, по сравнению с другим предлагаемым здесь решением:

  • Флаг 'g', который позволяет вам выполнить обрезку в многострочной строке
  • Синтаксис (text || ""), гарантирующий, что функция всегда будет работать, даже если переданный аргумент равен null или undefined.

Ответ 5

Как уже отмечали пара других, обычно лучше всего делать такие вещи, используя стороннюю JS-библиотеку. Не то, что trim() - сложная функция для создания себя, но существует так много функций, которые не являются родными для JavaScript, которые вам могут понадобиться, и вы можете писать сами, в ближайшее время становится более экономичным использовать библиотеку.

Конечно, еще одно преимущество использования библиотеки JS заключается в том, что авторы прилагают тяжелую работу по обеспечению того, чтобы функции работали во всех основных браузерах, чтобы вы могли кодировать стандартный интерфейс и забывать о раздражающих различиях между Интернетом Explorer и всех других браузеров.

Ответ 6

Немного более тонкая версия @Pat's.

return str.replace( /^\s+|\s+$/g, '' );

Ответ 7

Для ltrim замените пробелы, закрепленные в начале строки, ничем:

str2 = str.replace(/^\s+/,'');

Для rtrim замените пробелы, закрепленные в конце строки, ничем:

str2 = str.replace(/\s+$/,'');

Для обрезки:

str2 = str.replace(/^\s+|\s+$/g,'');

Все они используют regex'es для выполнения фактической работы.

Ответ 8

Почему бы просто не изменить прототип String? Почему бы не украсть функцию обрезки из библиотеки с открытым исходным кодом, как я здесь с YUI? (Вам действительно нужно загружать и всю структуру для этих простых таков?) Объедините их, и вы получите следующее:

String.prototype.trim = function() {
    try {
        return this.replace(/^\s+|\s+$/g, "");
    } catch(e) {
        return this;
    }
}

var s = " hello ";
alert(s.trim() == "hello"); // displays true

Ответ 9

Используйте Ариэль Флеслер быстрая функция обрезки:

// Licensed under BSD
function myBestTrim( str ){
 var start = -1,
  end = str.length;
 while( str.charCodeAt(--end) < 33 );
 while( str.charCodeAt(++start) < 33 );
 return str.slice( start, end + 1 );
};

Мое решение, однако, было бы так (потому что объект String в Firefox 3.5 и выше уже имеет метод trim:

String.prototype.trim = String.prototype.trim || function () {
    var start = -1,
        end   = this.length;

    while( this.charCodeAt(--end) < 33 );
    while( this.charCodeAt(++start) < 33 );

    return this.slice( start, end + 1 );
};

Ответ 10

Я сделал уловку с функцией триммера. Эта функция отличается четкой разницей в 24 участниках (из которых многие используют регулярные выражения), а также собственный string.trim() для Chrome и Chromium (!) И выполняет такую ​​же скорость, как Safari trim(). Результаты тестов приведены здесь: http://jsperf.com/mega-trim-test/7

function trim27(str) {
  var c;
  for (var i = 0; i < str.length; i++) {
    c = str.charCodeAt(i);
    if (c == 32 || c == 10 || c == 13 || c == 9 || c == 12)
    continue; else break;
  }
  for (var j = str.length - 1; j >= i; j--) {
    c = str.charCodeAt(j);
    if (c == 32 || c == 10 || c == 13 || c == 9 || c == 12)
    continue; else break;
  }
  return str.substring(i, j + 1);
}

Функция обрезает символы "\n\r\t\f", но легко добавить лишние символы пробелов, например. те, которые regexp использует как пробелы (\ s) с незначительной потерей производительности (см. http://jsperf.com/mega-trim-test/8).

Изменить: предыдущий trim27() обрезает только самые распространенные символы ( "\n\r\t\f" ), но чтобы обрезать все возможные пробелы, я включил ниже новую функцию mytrim():

if (!String.prototype.trim || "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF".trim() || navigator.userAgent.toString().toLowerCase().indexOf("chrome") != -1)
    var mytrim = function(str) {
        var c;
        for (var i = 0; i < str.length; i++) {
            c = str.charCodeAt(i);
            if (c == 32 || c == 10 || c == 13 || c == 9 || c == 12 || c == 11 || c == 160 || c == 5760 || c == 6158 || c == 8192 || c == 8193 || c == 8194 || c == 8195 || c == 8196 || c == 8197 || c == 8198 || c == 8199 || c == 8200 || c == 8201 || c == 8202 || c == 8232 || c == 8233 || c == 8239 || c == 8287 || c == 12288 || c == 65279)
            continue; else break;
        }
        for (var j = str.length - 1; j >= i; j--) {
            c = str.charCodeAt(j);
            if (c == 32 || c == 10 || c == 13 || c == 9 || c == 12 || c == 11 || c == 160 || c == 5760 || c == 6158 || c == 8192 || c == 8193 || c == 8194 || c == 8195 || c == 8196 || c == 8197 || c == 8198 || c == 8199 || c == 8200 || c == 8201 || c == 8202 || c == 8232 || c == 8233 || c == 8239 || c == 8287 || c == 12288 || c == 65279)
            continue; else break;
        }
        return str.substring(i, j + 1);
    };
    else var mytrim = function(str) {
        return str.trim();
    }

Используйте его следующим образом:

var foo = mytrim(" \n \t Trimmed \f \n "); // foo is now "Trimmed"

Вышеупомянутый mytrim() выполняет следующие действия:

  • Обрезает 26 различных пробелов (все 25 пробелов, упомянутых в http://perfectionkills.com/whitespace-deviations/, а также uFEFF, который представляет собой ZERO WIDTH NO-BREAK SPACE.
  • Делает результаты обрезки согласованными между браузерами.
  • Использует родную trim(), если она доступна и имеет возможность обрезать все 27 разных пробелов. Исключением являются Chrome и Chromium, которые имеют настолько медленную родную trim(), что вместо native мы используем нашу пользовательскую отделку.
  • И САМЫЙ ВАЖНЫЙ: не красив и не короток, но ЯВЛЯЕТСЯ ЧИСТОГО, чем любая из 24 конкурентных альтернатив в http://jsperf.com/mega-trim-test/12 (исключение: довольно старый Firefox 3.6.25 в Windows 7 запускает mytrim() довольно медленно по неизвестной причине).

Ответ 11

Ответ на многие вопросы JavaScript: jQuery

$j.trim(string)



Примечание: вышеупомянутое предполагает, что ваш jQuery настроен с помощью:

<script type="text/javascript">$j = jQuery.noConflict();</script>

Это гораздо более разумно, чем "$", и гораздо менее подробный, чем написание "jQuery" каждый раз.

Ответ 12

Microsoft.NET также имеет функцию String.trim как часть расширения базового типа JavaScript. Его можно использовать, если вы кодируете приложение ASP.NET.

Ответ 13

Я использую это.

    String.prototype.trim = function() {
        return this.replace(/^\s+|\s+$/g,"");
    }

Ответ 14

Я использую это с родным JavaScript

// Adding trim function to String object if its not there
if(typeof String.prototype.trim !== 'function') {
  String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/g, '');
  }
}

Используйте это как

var myString = "                  some text                  ";

alert(myString.trim());

Ответ 15

Собственно, с jQuery это выглядит так:

jQuery.trim(string)

(Ссылка)

Ответ 16

Я использую это:

Работа с функциями.

 function trim($) { 
                return (typeof $ == "function" ? $() : $).replace(/[\s]*/g,"")
        }

        code example: 

        trim((function(){ return "a  b"})) // ab

        trim(" a  b") //ab

Ответ 17

Вы можете использовать следующие...

function trim(str) {
    try {
        if (str && typeof(str) == 'string') {
            return str.replace(/^\s*|\s*$/g, "");
        } else {
            return '';
        }
    } catch (e) {
        return str;
    }
}

Ответ 18

Это, вероятно, не самый быстрый и может нарушить то, что ".trim()", вероятно, должно быть действительно, но мне не нравятся RegExs (в основном потому, что требуется столько времени, чтобы понять, что они на самом деле означают/делают) и мне нравится иметь что-то, что я знаю, будет работать независимо от того, есть ли у меня jQuery или нет (не говоря уже о правильной версии, так как я пробовал $.trim(myVar) с jQuery 1.4.2, и он не работает), и он получит избавиться от ВСЕХ лишних пробелов, а не только в конце, перестроить его так, как должно быть:

function Trim(obj) {
    var coll = "";
    var arrObj = obj.split(' ');

    for (var i=0;i<arrObj.length;i++) {
        if (arrObj[i] == "") {
            arrObj.splice(i,1);  // removes array indices containing spaces
        }
    }
    //alert(arrObj.length);  // should be equal to the number of words
    // Rebuilds with spaces in-between words, but without spaces at the end
    for (var i=0;i<arrObj.length;i++) {
        if (arrObj[i] != "" && i != arrObj.length-1)
            coll += arrObj[i] + " ";
        if (arrObj[i] != "" && i == arrObj.length-1)
            coll += arrObj[i];
    }

    return coll;
}

Ответ 19

Это старый вопрос, но никто из них не работал у меня. Мне просто нужно было обрезать ведущее и конечное пустое пространство, и это то, что я сделал. У моего тега div был id = дата начала.

$("#start-date").text().trim()