JavaScript'te dize kesilsin mi?


1304

JavaScript'te bir dizeyi nasıl kesebilirim?


290
Bu sorunun sorulması iki yıl sonra String.trim () in JavaScript 1.8.1 / ECMAScript 5'e yerel olarak eklendiğini belirtmek gerekir: Firefox 3.5+, Chrome / Safari 5+, IE9 + (yalnızca Standartlar modunda!)
scunliffe'nin

46
String.trim()Ayrıca Node.js'de kutunun dışında iyi çalışır.
Brad

47
Nitpick: için String.trim(), sınıf yöntemi ES5 / Node.js'de yoktur; bunun yerine, String.prototype.trim()örnek yöntemi vardır. Kullanımı: ' foo '.trim()değil String.trim(' foo ').
frontendbeauty

39
OMG, uyumluluk modunda 2013 ve IE9, String'de trim () yöntemi yok!
dbrin

80
JQuery'de $.trim(str)her zaman kullanılabilir olduğunu belirtmek gerekir .
Sygmoral

Yanıtlar:


893

IE9 + 'dan bu yana tüm tarayıcılarda trim()dizeler için yöntem vardır.

Desteklemeyen bu tarayıcılar için trim(), lütfen bu polyfill kullanabilirsiniz MDN'yi :

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

Bununla birlikte, eğer kullanılırsa jQuery, $.trim(str)de mevcuttur ve tanımsız / boş işlemektedir.


Bunu gör:

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(/(?:(?:^|\n)\s+|\s+(?:$|\n))/g,'').replace(/\s+/g,' ');};

87
JQuery'de $.trim(str)her zaman kullanılabilir olduğunu belirtmek gerekir .
Sygmoral

481

Bu çerçeveyi zaten kullanıyorsanız jQuery'den düzeltme uygundur.

$.trim('  your string   ');

Sık sık jQuery kullanma eğilimindeyim, bu yüzden onunla düzeltme dizeleri benim için doğal. Ama orada jQuery karşı tepki var olabilir? :)


1
bu sadece boşlukları (satırsonu) düzeltir .. karakterleri de düzeltebileceğiniz php trim gibi çalışmaz
Jeffz

jQuery 3.5.0, düzeltme yöntemini amortismana tabi tuttu.
Herbert Peters

165

Yukarıda bir sürü doğru cevap olmasına rağmen String, JavaScript'teki nesnenin ECMAScript 5'ten itibaren yerel bir .trim()yöntemi olduğu unutulmamalıdır . Bu nedenle ideal olarak, trim yönteminin prototipini oluşturmak için yapılan herhangi bir girişim, önce var olup olmadığını gerçekten kontrol etmelidir.

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

Yerel olarak eklendi: JavaScript 1.8.1 / ECMAScript 5

Böylece desteklenir:

Firefox: 3.5+

Safari: 5+

Internet Explorer: IE9 + (yalnızca Standartlar modunda!) 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+

ECMAScript 5 Destek Tablosu: http://kangax.github.com/es5-compat-table/


128

Kullanılabilecek birçok uygulama var. En belirgin olanı şuna benzer:

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

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


29

Bu sorunun üç yıl önce sorulduğunu biliyorum.Şimdi, String.trim()yerel olarak JavaScript'e eklendi.Örneğin, doğrudan aşağıdaki gibi kırpabilirsiniz,

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

3
Bu, yani sürümlerde çalışmaz, eğer yapabilirseniz jQuery methd $ .trim (str) kullanın
Ben Taliadoros

22

JQuery kullanıyorsanız, bu jQuery.trim()işlevi kullanın . Örneğin:

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

20

Flagrant Badassery'de kıyaslama bilgileriyle 11 farklı donanım bulunuyor:

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

Şaşırtıcı olmayan bir şekilde normal ifade temelli geleneksel döngüden daha yavaştır.


İşte benim kişisel olanım. Bu kod eski! JavaScript1.1 ve Netscape 3 için yazdım ve o zamandan beri sadece biraz güncellendi. (Orijinal kullanılan 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);
}

14

Yerli JavaScript Yöntemleri kullanın: String.trimLeft(), String.trimRight()ve String.trim().


String.trim()desteklenir IE9 + ve diğer tüm önemli tarayıcılar :

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


String.trimLeft()ve String.trimRight()standart değildir, ancak IE dışındaki tüm büyük tarayıcılarda desteklenir

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


IE desteği bir çoklu dolgu ile kolaydır, ancak:

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

1
@Brad True, ancak hala geniş tarayıcı desteğine sahipler. Ve çoklu dolgu herhangi bir tutarsızlıkla ilgilenir.
Web_Designer

1
Cevabınızı silmeyi düşünmelisiniz. Zaten burada bulunan diğer cevaplar tarafından 5 kat daha önce ele alınmamış hiçbir şey eklemez.
Brad

4
@Brad kimsenin bahsettiğini görmedim trimLeftya da trimRight.
Web_Designer

1
@Brad Kullanılabilir olduğunda yerel JavaScript uygulamasını tercih ederim. Bu cevap kendi lTrim()ve rTrim()yöntemlerini oluşturur.
Web_Designer

1
@Brad standart değildir, ancak bazı tarayıcılar hala onları destekler, bu nedenle bu tarayıcılarda çoklu dolgu oluşturmaya gerek yoktur.
Web_Designer

11
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(/(?:(?:^|\n)\s+|\s+(?:$|\n))/g, "").replace(/\s+/g, " ");
};

Utanmadan Matt duereg'den çalındı .



7

Açısal JS projesinden kodu kırp

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

})();

ve şöyle deyin trim(" hello ")


5

sadece kod kullan

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

Tarayıcı desteği

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

Eski tarayıcı için prototip ekleyin

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

başkalarına göre açıklamak için en iyi yolu. ama biraz daha değiştirmek replaceişlev regexp demek . Tamamen anlamadım. u regexp bölümünü biraz daha açıklamak ister misiniz?
muneeb_ahmed

4

İşte çok basit bir yol:

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

1
bu sorunun 2009'da sorulduğunu fark ettiniz, değil mi? : D
GrafiCode

5
Evet biliyorum. Ama birinin ihtiyacı olması durumunda bildiklerimi paylaşmaya karar verdim :)
HenryDev

3
anladın! şeyleri öğrenme ve paylaşma ruhu her zaman iyi bir şeydir!
HenryDev

3
"merhaba dünya" -> "helloworld"
Charlie Burns

2
Bu cevap yanlış. trimyalnızca baştaki ve sondaki boşlukları (sekmeleri ve diğer karakterleri içeren) kaldırmalıdır . Bu, ortadaki olanlar da dahil olmak üzere tüm boşlukları kaldırır.
mbomb007

4

Yerel olan Stringtrim() üzerinde kullanmak en kolay yol olabilir:

const fullName = "       Alireza Dezfoolian     ";
const trimmedFullName = fullName.trim();

console.log(trimmedFullName);


3

Değişkeninizi dize olarak bildirebilir ve trim işlevini kullanabilirsiniz:

var str = new String('my string'); 
str= str.trim();

2

Bugün, hemen hemen her tarayıcı destekliyor String.prototype.trim() .

Bu şekilde kullanırsınız:

var origStr = '   foo  ';
var newStr = origStr.trim(); // Value of newStr becomes 'foo'

Hala bu özelliği desteklemeyen eski bir tarayıcıyı desteklemeniz gerekebiliyorsa, bu MDN tarafından önerilen bir çoklu dolgudur :

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

1

Trim kullanan bir lib var. aşağıdaki kodu kullanarak çözdü.

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

1
Bu iyi bir çözüm değil. İki jQuery örneğinin yüklendiği durumu düşünün (etiketleri içeren ortak bir senaryo). JQuery'nin 2. örneği yüklendiğinde, .trim()yöntemini String.prototype.trimönceden ayarlanmış olan yerel değere eşit olarak ayarlayacak ve return jQuery.trim(this)böylece bir yığın taşması oluşturacaktır.
Brad M

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

Önceki cevaplardan, bayrak eklemekten farklıdır m.

Bayrak m, birkaç doğrusal metinde arama yapar. Bu modda, desenin ( ^ $) başlangıcını ve sonunu , yeni satır karakterinden ( \n) önce ve sonra işaretleyin .


1

Bunu düz JavaScript kullanarak yapabilirsiniz:

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

1

Şimdi trim () build javascript.

let yourName = ' something   ';
let actualTrimmedName = yourName.trim();

sadece konsol veya baskı kodu sonra adınız da kırpılır.


Yeni bilgi eklemeyen bir cevap göndermeden önce sorudaki yorumları okuduğunuzdan emin olun. En iyi birkaç yorum, bunu tanımlayan / tartışan ve çok sayıda oy hakkına sahiptir. Bu yorumlar neredeyse 8 yıl öncesindendir ve sorunun kendisi neredeyse 11 yaşındadır.
Ross Gurbutt

0

Burada hangi hataların gizleyebileceğini bilmiyorum, ama bunu kullanıyorum:

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

Veya metin içeriyorsa bu:

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

Baska deneme:

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

0

İşte TypeScript'te:

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

Yerel prototip mevcut değilse normal ifadeye geri döner.


0

.Trim () işlevi 2008'de JS yolunda kullanılamadığında trim için bu işlevi yazmıştım. Bazı eski tarayıcılar hala .trim () işlevini desteklemiyor ve umarım bu işlev birine yardımcı olabilir.

TRİM FONKSİYONU

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

Açıklama : trim () işlevi bir dize nesnesini kabul eder ve başlangıç ​​ve sondaki beyaz boşlukları (boşluklar, sekmeler ve yeni satırlar) kaldırır ve kesilen dizeyi döndürür. Geçerli verilerin gönderilmesini sağlamak için form girişlerini kırpmak için bu işlevi kullanabilirsiniz.

Fonksiyon örnek olarak aşağıdaki şekilde çağrılabilir.

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

-4

benimki kırpmanın gerekli olduğu durumları aramak için tek bir normal ifade kullanır ve istenen normal dize sınırlarını belirlemek için bu normal ifadenin sonuçlarını kullanır:

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
}

buna giren bir tasarım kararı, son yakalamayı gerçekleştirmek için bir alt dize kullanmaktı. s / \?: // (orta vadeli yakalamayı yapın) ve yedek parça şu hale gelir:

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

bu kodlarda yaptığım iki performans bahsi var:

  1. alt dize uygulaması orijinal dizenin verilerini kopyalar mı? eğer öyleyse, birincisinde, bir ipin kesilmesi gerektiğinde, ilk önce normalde (umarım kısmi olabilir) ve ikinci olarak alt dize çıkarma işleminde bir çift geçiş vardır. umarım bir alt dize uygulaması yalnızca orijinal dizeye başvurur, bu nedenle alt dize gibi işlemler neredeyse ücretsiz olabilir. Çapraz parmaklar

  2. normal ifade impl yakalama ne kadar iyi? orta vadeli çıktı değeri potansiyel olarak çok uzun olabilir. Tüm regex impls 'yakalama birkaç yüz KB giriş yakalama balk olmaz ki banka hazır değildi, ama ben de test etmedi (çok runtimes, üzgünüm!). ikinci HER ZAMAN bir yakalama gerçekleştirir; motorunuz bunu bir vuruş yapmadan yapabilirse, belki de yukarıdaki string-roping-tekniklerinden bazılarını kullanarak, kesinlikle KULLANIN!


-7

IE9 + ve diğer tarayıcılar için

function trim(text) {
    return (text == null) ? '' : ''.trim.call(text);
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.