Jaki jest najlepszy sposób trim () w javascript

głosy
38

Pytanie mówi wszystko; JS nie wydają się mieć metodę rodzimy wykończenia ().

Utwórz 13/10/2008 o 08:32
źródło użytkownik
W innych językach...                            


19 odpowiedzi

głosy
41

Najkrótsza forma dla jQuery:

string = $.trim(string);

Połączyć

Odpowiedział 30/10/2008 o 07:29
źródło użytkownik

głosy
30

według tej stronie najlepsze wszystko wokół jest podejście

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

Oczywiście jeśli używasz jQuery, będzie dostarczać Państwu zoptymalizowanego sposobu wykończenia.

Odpowiedział 13/10/2008 o 08:34
źródło użytkownik

głosy
18

Cóż, jak wiele osób, zawsze mówi, funkcja trim działa całkiem dobrze, ale jeśli nie chcesz korzystać z całej ramy tylko do wykonywania wykończenia, może być przydatna do spojrzeć na jego realizację. Więc to jest tutaj:

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

Główne zalety widzę w tej realizacji, w porównaniu do innych rozwiązań proponowanych już tu są:

  • The „g” flaga, która pozwala na perfom wykończenia na sznurku multi-line
  • The (tekst || „”) składnia które zapewniają, że funkcja będzie zawsze działać, nawet jeśli argument przekazywane jest null lub undefined.
Odpowiedział 30/10/2008 o 09:09
źródło użytkownik

głosy
16

Wiem, że to pytanie jest starożytny ale teraz Javascript faktycznie ma natywną .trim ()

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim

Odpowiedział 18/05/2014 o 07:18
źródło użytkownik

głosy
8

Jak kilka innych już wspomniano, jest to zazwyczaj najlepiej robić tego typu rzeczy za pomocą JS biblioteki innej firmy. Nie dlatego, że wykończenia () jest skomplikowana funkcja budować siebie, ale istnieje tak wiele funkcji, które nie są rodzime dla JavaScript, które mogą być potrzebne i koniec-up pisania siebie, wkrótce staje się bardziej opłacalne, aby korzystać z biblioteki.

Oczywiście, inną zaletą korzystania z biblioteki JS jest to, że autorzy zrobić ciężkiej pracy zapewniając, że funkcje działają na wszystkich głównych przeglądarek, dzięki czemu można zakodować do standardowego interfejsu i zapomnieć o drażniących różnic pomiędzy Internet Explorer i wszystko innych przeglądarek.

Odpowiedział 13/10/2008 o 08:48
źródło użytkownik

głosy
7

Nieco drobniejsza wersja @ Pat.

return str.replace( /^\s+|\s+$/g, '' );
Odpowiedział 13/10/2008 o 08:37
źródło użytkownik

głosy
6

Dla LTRIM wymienić przestrzenie zakotwiczonych na początku łańcucha z niczego:

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

Dla RTRIM wymienić przestrzenie zakotwiczone na końcu łańcucha z niczego:

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

Do wykończenia:

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

Te wszystkie używać regex'es robić rzeczywistej pracy.

Odpowiedział 13/10/2008 o 08:39
źródło użytkownik

głosy
5

Użyj szybkiego wykończenia funkcji Ariel Flesler za :

// 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 );
};

Moje rozwiązanie, choć byłoby to (ponieważ obiekt String w Firefoksie 3.5 i powyżej ma już trimmetody ):

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 );
};
Odpowiedział 20/10/2009 o 12:12
źródło użytkownik

głosy
5

Dlaczego nie wystarczy zmodyfikować prototyp ciąg? Dlaczego nie ukraść wykończenia funkcji z biblioteki open source, jak ja tu z YUI? (Czy naprawdę trzeba ładować i cały ram Ten prosty taks?) Je razem i masz w ten sposób:

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

var s = " hello ";
alert(s.trim() == "hello"); // displays true
Odpowiedział 12/12/2008 o 23:19
źródło użytkownik

głosy
4

Zrobiłem prędkość TRIM-funkcyjny w umyśle. Funkcja ta bije w wyraźną różnicę wszystkich 24 zawodników (z których wiele użyć wyrażeń regularnych), a także natywnej string.trim () Chrome i Chromium (!) I wykonuje jako szybki jak wykończeniem Safari (). Wyniki badań są tutaj: 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);
}

Funkcją listwy znaków „\ n \ r \ T \ F”, jednak z łatwością można dodać więcej spacjami postaci, np. tych, które wykorzystuje jako wyrażenie regularne odstępy (\ s) tylko z niewielką wydajność utracone (patrz http://jsperf.com/mega-trim-test/8 ).

Edycja: Powyższy trim27 () obcina tylko najczęstsze znaków ( "\ n \ r \ T \ F"), lecz do wykończenia wszystkie możliwe spacje, to podane poniżej nowej funkcji 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();
    }

Używaj go w ten sposób:

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

Powyższy mytrim () jest następujący:

  • Wycina 26 różne odstępy (wszystkie z wymienionych w 25 whitespaces http://perfectionkills.com/whitespace-deviations/ i dodatkowo uFEFF, która zerowej szerokości bez przerywania kosmicznych.
  • Sprawia przycinanie wyniki spójne różnych przeglądarkach.
  • Wykorzystuje natywne wykończenia (), jeśli jest on dostępny i ma zdolność do wykończenia wszystkich 27 różnych whitespaces. Wyjątkiem jest Chrome i Chromium których oba mają tak powolny natywną trim (), które zamiast natywnej używamy naszego własnego wykończenia.
  • I najważniejsze: nie jest piękny i nie jest krótki, ale jest wyraźnie szybciej niż jakikolwiek z 24 konkurencyjnych alternatyw w http://jsperf.com/mega-trim-test/12 (wyjątek: raczej stary Firefox 3.6.25 w Windows 7 uruchamia mytrim () raczej powoli nieznanych powodów).
Odpowiedział 22/09/2012 o 22:35
źródło użytkownik

głosy
2

Używam tego z natywnego kodu 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, '');
  }
}

Użyj takiego

var myString = "                  some text                  ";

alert(myString.trim());
Odpowiedział 17/06/2015 o 17:54
źródło użytkownik

głosy
1

Używam tego.

    String.prototype.trim = function() {
        return this.replace(/^\s+|\s+$/g,"");
    }
Odpowiedział 20/10/2009 o 12:05
źródło użytkownik

głosy
1

Microsoft .NET ma również String.trim funkcję jako część JavaScript typ bazowy Extensions. To może być używany, jeśli kodowanie aplikacji ASP.NET.

Odpowiedział 08/12/2008 o 14:35
źródło użytkownik

głosy
1

Odpowiedzią na tak wiele pytań javascript: jQuery

$j.trim(string)



Uwaga: powyższa zakłada swoją jQuery został zainstalowany z:

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

Który jest znacznie bardziej sensowne niż „$”, a znacznie mniej gadatliwy niż wpisując „jQuery” Za każdym razem.

Odpowiedział 13/10/2008 o 08:34
źródło użytkownik

głosy
0

Jest to stare pytanie, ale żaden z nich nie pracował dla mnie. Potrzebne mi było przycinać początkowe i końcowe białe znaki i to, co zrobiłem. Mój tag div id = miała rozpocząć aktualne.

$("#start-date").text().trim()
Odpowiedział 22/09/2014 o 13:23
źródło użytkownik

głosy
0

Prawdopodobnie nie jest to najszybsza i może naruszać co „.trim ()” chyba naprawdę powinno być, ale nie podoba mi RegExs (głównie dlatego, że zajmuje tak dużo czasu, aby dowiedzieć się, co naprawdę myśli / nie) i lubię mając coś, co wiem, będzie działać niezależnie od tego, czy mam jQuery czy nie (nie wspominając już o właściwej wersji, ponieważ próbowałem $ .trim (myVar) z jQuery 1.4.2 i nie działa), i pozbyć się wszystkich dodatkowe spacje, a nie tylko na koniec, przebudowa to jak powinno być:

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;
}
Odpowiedział 11/04/2013 o 02:32
źródło użytkownik

głosy
0

Można użyć następujących ...

function trim(str) {
    try {
        if (str && typeof(str) == 'string') {
            return str.replace(/^\s*|\s*$/g, "");
        } else {
            return '';
        }
    } catch (e) {
        return str;
    }
}
Odpowiedział 17/07/2010 o 06:14
źródło użytkownik

głosy
0

Używam tego:

Praca z funkcjami.

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

        code example: 

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

        trim(" a  b") //ab
Odpowiedział 17/07/2010 o 03:07
źródło użytkownik

głosy
0

Faktycznie, z jQuery to wydaje się być sposób:

jQuery.trim(string)

(Odniesienie)

Odpowiedział 30/10/2008 o 07:09
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more