जावास्क्रिप्ट में ट्रिम स्ट्रिंग?


1304

मैं जावास्क्रिप्ट में एक स्ट्रिंग कैसे ट्रिम कर सकता हूं?


290
इस प्रश्न के दो साल बाद यह उल्लेख के लायक है कि String.trim () को मूल रूप से JavaScript 1.8.1 / ECMAScript 5 में जोड़ा गया था, जो इसमें समर्थित है: Firefox 3.5+, Chrome / Safari 5+, IE9 + (केवल मानक मोड में!) scunliffe का उत्तर: stackoverflow.com/a/8522376/8432
wweicker

46
String.trim()Node.js. में बॉक्स से बाहर भी ठीक काम करता है
ब्रैड

47
नाइटपिक करने के लिए: String.trim()वर्ग विधि, ES5 / Node.js में मौजूद नहीं है; इसके बजाय, String.prototype.trim()उदाहरण विधि, मौजूद है। उपयोग: ' foo '.trim()नहीं String.trim(' foo ')
frontendbeauty

39
OMG, यह 2013 में है और कॉम्पिटिशन मोड में IE9 में स्ट्रिंग पर कोई ट्रिम () विधि नहीं है!
डेबिन

80
कि jQuery में ध्यान देने योग्य है, $.trim(str)हमेशा उपलब्ध है।
Sygmoral

जवाबों:


893

IE9 + के बाद से सभी ब्राउज़रों में trim()स्ट्रिंग्स के लिए विधि है।

उन ब्राउज़रों जो समर्थन नहीं करता है के लिए trim(), आप से इस polyfill उपयोग कर सकते हैं MDN :

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

जिसके अनुसार, का उपयोग करते हुए अगर jQuery, $.trim(str)भी उपलब्ध है और हैंडल अपरिभाषित / बातिल।


यह देखो:

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 में ध्यान देने योग्य है, $.trim(str)हमेशा उपलब्ध है।
Sygmoral

481

JQuery से ट्रिम सुविधाजनक है यदि आप पहले से ही उस ढांचे का उपयोग कर रहे हैं।

$.trim('  your string   ');

मैं अक्सर jQuery का उपयोग करते हैं, इसलिए इसके साथ तार ट्रिम करना मेरे लिए स्वाभाविक है। लेकिन यह संभव है कि वहाँ बाहर jQuery के खिलाफ प्रतिक्रिया है? :)


1
यह केवल व्हाट्सएप (न्यूलाइन) को ट्रिम करता है .. यह php ट्रिम की तरह काम नहीं करता है, जहां आप पात्रों को भी ट्रिम कर सकते हैं
जेफज़

jQuery 3.5.0 ने उनकी ट्रिम विधि को अपदस्थ कर दिया।
हर्बर्ट पीटर्स

165

यद्यपि ऊपर सही उत्तरों का एक समूह है, यह ध्यान दिया जाना चाहिए कि Stringजावास्क्रिप्ट में ऑब्जेक्ट में ECMAScript 5 के.trim() रूप में एक मूल विधि है । इस प्रकार आदर्श रूप से ट्रिम विधि के प्रोटोटाइप के किसी भी प्रयास को वास्तव में यह देखने के लिए जांचना चाहिए कि क्या यह पहले से ही मौजूद है।

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

मूल रूप से जोड़ा गया: जावास्क्रिप्ट 1.8.1 / ECMAScript 5

इस प्रकार समर्थित:

फ़ायरफ़ॉक्स: 3.5+

सफारी: 5+

इंटरनेट एक्सप्लोरर: IE9 + (केवल मानक मोड में!) Http://blogs.msdn.com/b/ie/archive/2010/06/25/enhanced-scripting-in-ie9-ecmascript-5-support-and-more .aspx

क्रोम: 5+

ओपेरा: 10.5+

ECMAScript 5 समर्थन तालिका: http://kangax.github.com/es5-compat-table/




29

मुझे पता है कि यह सवाल तीन साल पहले पूछा String.trim()गया था। अब , जावास्क्रिप्ट में मूल रूप से जोड़ा गया था। एक उदाहरण के लिए, आप सीधे इसे निर्धारित करने के लिए ट्रिम कर सकते हैं,

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

3
यह संस्करणों में काम नहीं करेगा, यदि आप कर सकते हैं तो jQuery मेथड $ .trim (str) का उपयोग करें
बेन टालियाडोरोस

22

यदि आप jQuery का उपयोग कर रहे हैं, तो jQuery.trim()फ़ंक्शन का उपयोग करें । उदाहरण के लिए:

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

20

प्रमुख बदमाशों में बेंचमार्क जानकारी के साथ 11 अलग-अलग ट्रिम्स हैं:

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

गैर-आश्चर्यजनक रूप से रेगेक्सप-आधारित पारंपरिक लूप की तुलना में धीमी हैं।


यहाँ मेरा व्यक्तिगत है। यह कोड पुराना है! मैंने इसे JavaScript1.1 और नेटस्केप 3 के लिए लिखा था और यह केवल तब से थोड़ा अपडेट किया गया है। (मूल 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

मूल निवासी जावास्क्रिप्ट तरीके का उपयोग करें: String.trimLeft(), String.trimRight(), और String.trim()


String.trim()IE9 + और अन्य सभी प्रमुख ब्राउज़रों में समर्थित है :

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


String.trimLeft()और String.trimRight()गैर-मानक हैं, लेकिन IE को छोड़कर सभी प्रमुख ब्राउज़रों में समर्थित हैं

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


IE समर्थन एक पॉलीफ़िल के साथ हालांकि आसान है:

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
@ ब्रैड ट्रू, लेकिन उनके पास अभी भी विस्तृत ब्राउज़र समर्थन है। और पॉलीफिल किसी भी विसंगतियों का ख्याल रखता है।
वेब_डिजाइनर

1
आपको अपना उत्तर हटाने पर विचार करना चाहिए। यह कुछ भी नहीं जोड़ता है जो पहले से ही यहां पहले से ही अन्य उत्तरों द्वारा 5x से अधिक कवर नहीं किया गया है।
ब्रैड

4
@ ब्रैड मैंने किसी का उल्लेख trimLeftया देखा नहीं है trimRight
वेब_डिजाइनर

1
@ ब्रैड उपलब्ध होने पर मैं मूल जावास्क्रिप्ट कार्यान्वयन को प्राथमिकता देता हूं। यह जवाब अपने स्वयं के lTrim()और rTrim()तरीके बनाता है ।
वेब_डिजाइनर

1
@ ब्रैड वे गैर-मानक हैं फिर भी कुछ ब्राउज़र अभी भी उनका समर्थन करते हैं, इसलिए उन ब्राउज़र में पॉलीफ़िल बनाने की कोई आवश्यकता नहीं है।
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, " ");
};

बेशर्मी से मैट ड्यूयर से चोरी हो गई ।



7

कोड को कोणीय js प्रोजेक्ट से ट्रिम करें

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

})();

और इसे कॉल करें trim(" hello ")


5

बस कोड का उपयोग करें

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

ब्राउज़र का समर्थन

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

पुराने ब्राउज़र के लिए प्रोटोटाइप जोड़ें

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

दूसरों की तुलना में समझाने का सबसे अच्छा तरीका है। लेकिन इसे थोड़ा और संशोधित करें मेरा मतलब है कि replaceफ़ंक्शन regexp। मुझे यह पूरी तरह से नहीं मिला। क्या आप इसे थोड़ा और विस्तार से बताना चाहेंगे?
muneeb_ahmed

4

यहाँ एक बहुत ही सरल तरीका है:

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

1
आपको पता है कि यह सवाल 2009 में पूछा गया था, क्या आप? : डी
ग्राफीकोड

5
हाँ मुझे पता है। लेकिन मैंने यह तय करने का फैसला किया कि किसी को इसकी आवश्यकता होने पर मुझे पता चल जाएगा :)
हेनरीडेव

3
आपको यह मिला! चीजों को सीखने और साझा करने की भावना हमेशा एक अच्छी बात है!
हेनरीडेव

3
"हैलो वर्ल्ड" -> "हेलोवर्ल्ड"
चार्ली बर्न्स

2
यह उत्तर गलत है। trimकेवल प्रमुख और अनुगामी व्हाट्सएप को हटा देना चाहिए (जिसमें टैब और अन्य वर्ण शामिल हैं)। इसके बजाय सभी रिक्त स्थान को हटा देता है, जिसमें बीच में शामिल हैं।
mbomb007


3

आप बस अपने चर को स्ट्रिंग घोषित कर सकते हैं और इसके ट्रिम फ़ंक्शन का उपयोग कर सकते हैं:

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

2

आज, बहुत ज्यादा हर ब्राउज़र का समर्थन करता है String.prototype.trim()

आप इसे इस तरह उपयोग करते हैं:

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

मामले में आपको अभी भी एक प्राचीन ब्राउज़र का समर्थन करने की आवश्यकता हो सकती है जो इस सुविधा का समर्थन नहीं करता है, यह एमडीएन द्वारा सुझाया गया पॉलीफ़िल है:

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

1

मेरा एक परिवाद है जो ट्रिम का उपयोग करता है। तो निम्न कोड का उपयोग करके इसे हल किया।

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

1
यह एक अच्छा उपाय नहीं है। उस स्थिति पर विचार करें जहां jQuery के दो उदाहरण लोड किए गए हैं (टैग के साथ एक सामान्य परिदृश्य)। जब jQuery भार का दूसरा उदाहरण है, तो यह पहले से सेट किए गए .trim()देशी के बराबर विधि String.prototype.trimसेट करेगा return jQuery.trim(this), इस प्रकार स्टैक ओवरफ्लो का निर्माण होगा।
ब्रैड एम।

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

पिछले उत्तरों से, यह ध्वज जोड़ने से अलग है m

ध्वज mकई रेखीय का पाठ खोजेगा। इस मोड में, पैटर्न की शुरुआत और अंत ( ^ $) को नई लाइन वर्ण से पहले और बाद में डाला जाता है ( \n)।


1

आप इसे सादे जावास्क्रिप्ट का उपयोग करके कर सकते हैं:

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

अब जावास्क्रिप्ट में ट्रिम () बिल्ड करें।

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

बस कंसोल या प्रिंट कोड के बाद आपका नाम भी ट्रिम कर दिया जाएगा।


उत्तर पोस्ट करने से पहले प्रश्न पर टिप्पणियों को पढ़ना सुनिश्चित करें, जिसमें कोई नई जानकारी नहीं है। शीर्ष कई टिप्पणियाँ सभी इसका वर्णन / चर्चा कर रहे हैं और बड़ी संख्या में अप-वोट हैं। ये टिप्पणियां लगभग 8 साल पहले की हैं और यह सवाल लगभग 11 साल पुराना है।
रोस गुरबात्त

0

पता नहीं क्या कीड़े यहाँ छिपा सकते हैं, लेकिन मैं इसका उपयोग करता हूं:

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

या यह, यदि पाठ में प्रवेश होता है:

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

एक और प्रयास:

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

0

यहाँ यह टाइपस्क्रिप्ट में है:

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

यदि मूल प्रोटोटाइप उपलब्ध नहीं है, तो यह रेगेक्स पर वापस आ जाएगा।


0

मैंने इस फ़ंक्शन को ट्रिम के लिए लिखा था, जब .trim () फ़ंक्शन JS 2008 में वापस नहीं आया था। कुछ पुराने ब्राउज़र अभी भी .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;
}

व्याख्या : फ़ंक्शन ट्रिम () एक स्ट्रिंग ऑब्जेक्ट को स्वीकार करता है और किसी भी शुरुआती और अनुगामी व्हाट्सएप (रिक्त स्थान, टैब और नईलाइन) को हटा देता है और छंटनी की गई स्ट्रिंग को वापस करता है। आप इस फ़ंक्शन का उपयोग वैध डेटा भेजने के लिए प्रपत्र इनपुट ट्रिम करने के लिए कर सकते हैं।

फ़ंक्शन को उदाहरण के रूप में निम्नलिखित तरीके से कहा जा सकता है।

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

-4

खान उन मामलों की तलाश के लिए एक एकल रेगेक्स का उपयोग करता है जहां ट्रिमिंग आवश्यक है, और वांछित विकल्प सीमा निर्धारित करने के लिए रेगेक्स के परिणामों का उपयोग करता है:

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
}

इसमें जो एक डिजाइन निर्णय लिया गया, वह अंतिम कैप्चर करने के लिए एक विकल्प का उपयोग कर रहा था। s / \?: // (मध्य अवधि कैप्चरिंग बनाएं) और प्रतिस्थापन टुकड़ा बन जाता है:

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

इन प्रदर्शनों में मैंने दो प्रदर्शन दांव लगाए हैं:

  1. प्रतिस्थापन स्ट्रिंग मूल स्ट्रिंग के डेटा की प्रतिलिपि बनाता है? यदि हां, तो पहले में, जब एक स्ट्रिंग को ट्रिम करने की आवश्यकता होती है, तो एक डबल ट्रैवर्सल होता है, पहला रेगेक्स में (जो उम्मीद कर सकता है कि आंशिक रूप से हो सकता है), और दूसरा सबस्ट्रिंग निष्कर्षण में। उम्मीद है कि एक विकल्प कार्यान्वयन केवल मूल स्ट्रिंग को संदर्भित करता है, इसलिए प्रतिस्थापन जैसे संचालन लगभग मुफ्त हो सकते हैं। उम्मीद मत छोड़ो

  2. रेगेक्स इम्प्लांट में कब्जा कितना अच्छा है? मध्य अवधि, उत्पादन मूल्य, संभवतः बहुत लंबा हो सकता है। मैं बैंक के लिए तैयार नहीं था कि सभी regex 'कैप्चरिंग कैप्चरिंग एक सौ केबी इनपुट इनपुट पर गंजा नहीं होगा, लेकिन मैंने भी परीक्षण नहीं किया (बहुत सारे रनटाइम, क्षमा करें!)। दूसरा हमेशा एक कब्जा चलाता है; अगर आपका इंजन बिना किसी हिट के ऐसा कर सकता है, तो शायद उपरोक्त स्ट्रिंग-रोपिंग-तकनीकों में से कुछ का उपयोग करके, निश्चित रूप से USE IT के लिए!


-7

IE9 + और अन्य ब्राउज़रों के लिए

function trim(text) {
    return (text == null) ? '' : ''.trim.call(text);
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.