Trim string în JavaScript? (Programare, Javascript, String, Trim)

Vinod a intrebat.

Cum pot tăia un șir de caractere în JavaScript? Adică, cum pot elimina toate spațiile albe de la începutul și sfârșitul șirului în JavaScript?

Comentarii

    292

  • Merită să menționăm că la doi ani după ce a fost pusă această întrebare, String.trim() a fost adăugat nativ în JavaScript 1.8.1 / ECMAScript 5, cu suport în: Firefox 3.5+, Chrome/Safari 5+, IE9+ (doar în modul Standards!) vezi răspunsul lui scunliffe: stackoverflow.com/a/8522376/8432 –  > Por wweicker.
  • 46

  • String.trim() de asemenea, funcționează bine din start în Node.js. –  > Por Brad.
  • 47

  • Pentru a corecta: String.trim(), , metoda de clasă, nu există în ES5/Node.js; în schimb, String.prototype.trim(), există metoda de instanță. Utilizare: ' foo '.trim(), , not String.trim(' foo '). –  > Por frontendbeauty.
  • 39

  • OMG, suntem în 2013 și IE9 în modul compat nu are metoda trim() pe String! –  > Por dbrin.
  • 80

  • Merită menționat faptul că în jQuery, $.trim(str) este întotdeauna disponibilă. –  > Por Sygmoral.
20 răspunsuri
Pradeep Kumar Mishra

Toate browserele începând cu IE9+ au trim() pentru șiruri de caractere:

" 
 test 
 ".trim(); // returns "test" here

Pentru acele browsere care nu acceptă trim(), , puteți utiliza acest polyfill de la MDN:

if (!String.prototype.trim) {
    (function() {
        // Make sure we trim BOM and NBSP
        var rtrim = /^[suFEFFxA0]+|[suFEFFxA0]+$/g;
        String.prototype.trim = function() {
            return this.replace(rtrim, '');
        };
    })();
}

Acestea fiind spuse, dacă utilizați jQuery, , $.trim(str) este, de asemenea, disponibilă și gestionează și indefinit/null.


A se vedea acest lucru:

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

String.prototype.ltrim=function(){return this.replace(/^s+/,'');};

String.prototype.rtrim=function(){return this.replace(/s+$/,'');};

String.prototype.fulltrim=function(){return this.replace(/(?:(?:^|
)s+|s+(?:$|
))/g,'').replace(/s+/g,' ');};

Comentarii

    87

  • Merită menționat faptul că în jQuery, $.trim(str) este întotdeauna disponibil. –  > Por Sygmoral.
barneytron

Tăietura de la jQuery este convenabil dacă utilizați deja acel cadru.

$.trim('  your string   ');

Am tendința de a folosi des jQuery, așa că tăierea șirurilor de caractere cu el este naturală pentru mine. Dar este posibil să existe o reacție negativă împotriva jQuery acolo? 🙂

Comentarii

  • acest lucru taie doar spațiile albe (newline) .. nu funcționează ca php trim , unde puteți tăia și caracterele –  > Por Jeffz.
  • jQuery 3.5.0 a depreciat metoda lor de tăiere. –  > Por Herbert Peters.
scunliffe

Deși există o grămadă de răspunsuri corecte mai sus, trebuie remarcat faptul că String în JavaScript are o funcție nativă .trim() începând cu ECMAScript 5. Astfel, în mod ideal, orice încercare de a crea prototipul metodei trim ar trebui să verifice mai întâi dacă există deja.

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

Adăugată nativ în:JavaScript 1.8.1 / ECMAScript 5

Astfel, este acceptată în:

Firefox: 3.5+

Safari: 5+

Internet Explorer: IE9+ (numai în modul Standarde!) http://blogs.msdn.com/b/ie/archive/2010/06/25/enhanced-scripting-in-ie9-ecmascript-5-support-and-more.aspx

Chrome: 5+

Opera: 10.5+

Tabel de suport ECMAScript 5: http://kangax.github.com/es5-compat-table/

Gumbo

Există o mulțime de implementări care pot fi utilizate. Cea mai evidentă pare a fi ceva de genul acesta:

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

" foo bar ".trim();  // "foo bar"

Mark Davidson

Versiunea simplă aici Care este o funcție generală pentru tăierea JavaScript?

function trim(str) {
        return str.replace(/^s+|s+$/g,"");
}

Vijin Paulraj

Știu că această întrebare a fost pusă cu trei ani în urmă.Acum,String.trim() a fost adăugată în mod nativ în JavaScript.Pentru o instanță, puteți tăia direct, după cum urmează,

document.getElementById("id").value.trim();

Comentarii

  • Acest lucru nu va funcționa în versiunile ie, folosiți methd jQuery $.trim(str) dacă puteți –  > Por Ben Taliadoros.
Able Alias

Dacă folosiți jQuery, utilizați jQuery.trim() funcția. De exemplu:

if( jQuery.trim(StringVariable) == '')

Tero

Flagrant Badassery are 11 ornamente diferite cu informații de referință:

http://blog.stevenlevithan.com/archives/faster-trim-javascript

În mod neașteptat, cele bazate pe regexp sunt mai lente decât bucla tradițională.


Iată-l pe cel personal al meu. Acest cod este vechi! L-am scris pentru JavaScript1.1 și Netscape 3 și de atunci a fost doar puțin actualizat. (Originalul a folosit String.charAt)

/**
 *  Trim string. Actually trims all control characters.
 *  Ignores fancy Unicode spaces. Forces to string.
 */
function trim(str) {
    str = str.toString();
    var begin = 0;
    var end = str.length - 1;
    while (begin <= end && str.charCodeAt(begin) < 33) { ++begin; }
    while (end > begin && str.charCodeAt(end) < 33) { --end; }
    return str.substr(begin, end - begin + 1);
}

Web_Designer

Utilizați metodele native JavaScript: String.trimLeft(), , String.trimRight(), , și String.trim().

String.trim() este acceptată în IE9+ și toate celelalte browsere importante:

'  Hello  '.trim()  //-> 'Hello'

String.trimLeft() și String.trimRight() sunt non-standard, dar sunt acceptate în toate browserele importante cu excepția IE

'  Hello  '.trimLeft()   //-> 'Hello  '
'  Hello  '.trimRight()  //-> '  Hello'

Cu toate acestea, suportul pentru IE este ușor de realizat cu un polyfill:

if (!''.trimLeft) {
    String.prototype.trimLeft = function() {
        return this.replace(/^s+/,'');
    };
    String.prototype.trimRight = function() {
        return this.replace(/s+$/,'');
    };
    if (!''.trim) {
        String.prototype.trim = function() {
            return this.replace(/^s+|s+$/g, '');
        };
    }
}

Comentarii

  • @Brad Adevărat, dar au totuși un suport larg pentru browsere. Iar polyfill-ul are grijă de orice neconcordanțe. –  > Por Web_Designer.
  • Ar trebui să vă gândiți să vă ștergeți răspunsul. Nu adaugă nimic care să nu fi fost deja acoperit de 5 ori de alte răspunsuri deja existente aici. –  > Por Brad.
  • @Brad Nu am văzut pe nimeni să menționeze trimLeft sau trimRight. –  > Por Web_Designer.
  • @Brad Eu prefer implementarea nativă în JavaScript atunci când este disponibilă. Acest răspuns își face propriul lTrim() și rTrim() metode. –  > Por Web_Designer.
  • @Brad Ele sunt non-standard, dar unele browsere încă le acceptă, deci în acele browsere nu este nevoie de a crea un polyfill. –  > Por Web_Designer.
yckart
String.prototype.trim = String.prototype.trim || function () {
    return this.replace(/^s+|s+$/g, "");
};

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

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

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

Furat fără rușine de la Matt duereg.

rab

Codul de tăiere de la angular js proiect

var trim = (function() {

  // if a reference is a `String`.
  function isString(value){
       return typeof value == 'string';
  } 

  // native trim is way faster: http://jsperf.com/angular-trim-test
  // but IE doesn't have it... :-(
  // TODO: we should move this into IE/ES5 polyfill

  if (!String.prototype.trim) {
    return function(value) {
      return isString(value) ? 
         value.replace(/^s*/, '').replace(/s*$/, '') : value;
    };
  }

  return function(value) {
    return isString(value) ? value.trim() : value;
  };

})();

și apelați-l ca trim(" hello ")

Behnam Mohammadi

utilizați codul simplu

var str = "       Hello World!        ";
alert(str.trim());

Suport pentru browser

Feature         Chrome  Firefox Internet Explorer   Opera   Safari  Edge
Basic support   (Yes)   3.5     9                   10.5    5       ?

Pentru browserul vechi, adăugați prototipul

if (!String.prototype.trim) {
  String.prototype.trim = function () {
    return this.replace(/^[suFEFFxA0]+|[suFEFFxA0]+$/g, '');
  };
}

Comentarii

  • cel mai bun mod de a explica, în comparație cu alții.dar modificați-l puțin mai mult, adică replace funcția regexp. nu am înțeles complet. ați dori să explicați puțin mai mult partea de regexp? –  > Por muneeb_ahmed.
HenryDev

Iată o modalitate foarte simplă:

function removeSpaces(string){
return string.split(' ').join('');
}

Comentarii

  • ” hello world ” -> „helloworld” -> „helloworld” -&gt.  > Por Charlie Burns.
  • Acest răspuns este greșit. trim ar trebui să elimine doar partea de început și de sfârșit spațiu alb (care include tabulatoare și alte caractere). În schimb, se elimină toate spațiile, inclusiv cele din mijloc. –  > Por mbomb007.
  • Acest răspuns neexplicat este incorect și ar trebui eliminat. Cu alte cuvinte, este răspunsul corect la o altă întrebare. –  > Por mickmackusa.
Zesar

Am o lib care folosește trim. așa că am rezolvat-o folosind următorul cod.

String.prototype.trim = String.prototype.trim || function(){ return jQuery.trim(this); };

Comentarii

  • Aceasta nu este o soluție bună. Luați în considerare cazul în care sunt încărcate două instanțe de jQuery (un scenariu comun cu etichete). Atunci când a doua instanță de jQuery se încarcă, aceasta își va seta .trim() egală cu metoda nativă String.prototype.trim care a fost deja setată la return jQuery.trim(this), , creând astfel o depășire de stivă. –  > Por Brad M.
user5846985

Puteți face acest lucru folosind JavaScript simplu:

function trimString(str, maxLen) {
if (str.length <= maxLen) {
return str;
}
var trimmed = str.substr(0, maxLen);
return trimmed.substr(0, trimmed.lastIndexOf(' ')) + '…';
}

// Let's test it

sentenceOne = "too short";
sentencetwo = "more than the max length";

console.log(trimString(sentenceOne, 15));
console.log(trimString(sentencetwo, 15));

plavozont

Nu știu ce bug-uri se pot ascunde aici, dar eu folosesc acest lucru:

var some_string_with_extra_spaces="   goes here    "
console.log(some_string_with_extra_spaces.match(/S.*S|S/)[0])

Sau acest lucru, dacă textul conține introduce:

console.log(some_string_with_extra_spaces.match(/S[sS]*S|S/)[0])

O altă încercare:

console.log(some_string_with_extra_spaces.match(/^s*(.*?)s*$/)[1])

Comentarii

  • Această tehnică este periculoasă în cazul în care textul poate conține caractere newline. Aceasta va trunchia șirul. Există tehnici mai bune / mai fiabile decât aceasta. "one twor
    three".match(/S.*S|S/)[0]
    randamente: "one two" –  > Por mickmackusa.
Joseph Lennox

Aici este în TypeScript:

var trim: (input: string) => string = String.prototype.trim
    ? ((input: string) : string => {
        return (input || "").trim();
    })
    : ((input: string) : string => {
        return (input || "").replace(/^s+|s+$/g,"");
    })

Se va reveni la regex dacă prototipul nativ nu este disponibil.

AnaMaria

Am scris această funcție pentru trim, când funcția .trim() nu era disponibilă în JS, cu mult timp în urmă, în 2008. Unele dintre browserele mai vechi încă nu suportă funcția .trim() și sper ca această funcție să ajute pe cineva.

FUNCȚIA TRIM

function trim(str)
{
    var startpatt = /^s/;
    var endpatt = /s$/;

    while(str.search(startpatt) == 0)
        str = str.substring(1, str.length);

    while(str.search(endpatt) == str.length-1)
        str = str.substring(0, str.length-1);   

    return str;
}

Explicație: Funcția trim() acceptă un obiect șir de caractere și elimină toate spațiile albe de început și de sfârșit (spații, tabulări și linii noi) și returnează șirul tăiat. Puteți utiliza această funcție pentru a tăia intrările din formulare pentru a asigura transmiterea de date valide.

Funcția poate fi apelată în felul următor, ca exemplu.

form.elements[i].value = trim(form.elements[i].value);

rektide

mine utilizează un singur regex pentru a căuta cazurile în care este necesară tunderea și utilizează rezultatele acelui regex pentru a determina limitele subșirurilor dorite:

var illmatch= /^(s*)(?:.*?)(s*)$/
function strip(me){
    var match= illmatch.exec(me)
    if(match && (match[1].length || match[2].length)){
        me= me.substring(match[1].length, p.length-match[2].length)
    }
    return me
}

singura decizie de proiectare care a fost luată în acest sens a fost utilizarea unui subșir pentru a efectua captura finală. s/?:// (face capturarea termenului din mijloc) și și și fragmentul de înlocuire devine:

    if(match && (match[1].length || match[3].length)){
        me= match[2]
    }

există două pariuri de performanță pe care le-am făcut în aceste implanturi:

  1. implementarea substringului copiază datele șirului original? dacă da, în primul caz, atunci când un șir trebuie tăiat există o dublă traversare, mai întâi în regex (care poate, sperăm, să fie parțială), iar a doua în extracția substringului. sperăm că o implementare a substringului face referire doar la șirul original, astfel încât operațiile precum substringul să fie aproape gratuite. degetele încrucișate

  2. cât de bună este captura în implantul regex? termenul din mijloc, valoarea de ieșire, ar putea fi foarte lung. nu eram pregătit să pariez că toate capturile implantelor regex nu s-ar împotrivi unei capturi de intrare de câteva sute de KB, dar nici nu am testat (prea multe timpi de execuție, îmi pare rău!). al doilea execută ÎNTOTDEAUNA o captură; dacă motorul dvs. poate face acest lucru fără să fie afectat, poate folosind unele dintre tehnicile de mai sus de tăiere a șirurilor, cu siguranță UTILIZAȚI-L!

Codler

Pentru IE9+ și alte browsere

function trim(text) {
    return (text == null) ? '' : ''.trim.call(text);
}