স্ট্রিংয়ের শুরু এবং শেষ থেকে স্পেসগুলি ট্রিম করুন


152

আমি শিরোনাম স্ট্রিংয়ের শুরু এবং শেষ থেকে ফাঁকাগুলি ছাঁটাই করার কোনও উপায় খুঁজতে চেষ্টা করছি। আমি এটি ব্যবহার করছিলাম তবে এটি কাজ করছে বলে মনে হচ্ছে না:

title = title.replace(/(^[\s]+|[\s]+$)/g, '');

কোন ধারনা?


1
var s = '1'; s = s.replace (/ ^ \ s + | \ s + $ / g, ''); সতর্কতা ('-' + s + '-'); // এটি এর মতো কাজ করে, আপনার প্যারেন্স বা স্কোয়ার ধনুর্বন্ধনী প্রয়োজন নেই।
এরকার

2
জাভাস্ক্রিপ্ট .trimএখনই নির্মিত হয়েছে, তাই এটি আধুনিক ব্রাউজারগুলির জন্য উত্তর: stackoverflow.com/a/3000900/29182
জিগজি

এই নিবন্ধটি দেখুন: javascripttstutorial.com/blog/trim-string

function trim11 (str) { str = str.replace(/^\s+/, ''); for (var i = str.length - 1; i >= 0; i--) { if (/\S/.test(str.charAt(i))) { str = str.substring(0, i + 1); break; } } return str; }
বদ্রি জিএস

উত্তর:


216

দ্রষ্টব্য: 2015 অবধি , সমস্ত বড় ব্রাউজারগুলি (IE> = 9 সহ) স্ট্রিং.প্রোটোটাইপ.ট্রিম () সমর্থন করে । এর অর্থ হল যে বেশিরভাগ ব্যবহারের ক্ষেত্রে কেবল str.trim()প্রশ্নটিই করা প্রশ্নটি অর্জন করার সর্বোত্তম উপায়।


trimপারফরম্যান্সের দিক দিয়ে স্টিভেন লেভিথন জাভাস্ক্রিপ্টে অনেকগুলি বিভিন্ন বাস্তবায়ন বিশ্লেষণ করেছেন।

তাঁর সুপারিশটি হ'ল:

function trim1 (str) {
    return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}

"সাধারণ উদ্দেশ্য বাস্তবায়নের জন্য যা দ্রুত ক্রস ব্রাউজার হয়" এবং

function trim11 (str) {
    str = str.replace(/^\s+/, '');
    for (var i = str.length - 1; i >= 0; i--) {
        if (/\S/.test(str.charAt(i))) {
            str = str.substring(0, i + 1);
            break;
        }
    }
    return str;
}

"যদি আপনি সমস্ত ব্রাউজারগুলিতে ব্যতিক্রমীভাবে দীর্ঘ স্ট্রিংগুলি পরিচালনা করতে চান"।

তথ্যসূত্র


21
নতুন সাফারি (5), ক্রোম (5), ফায়ারফক্স (3.6) এবং অপেরা (10.5) সমস্ত দেশীয় স্ট্রিং ট্রিম পদ্ধতি সমর্থন করে। এটি হ'ল, আমি নতুন একটি বৈশ্বিক ফাংশন না দিয়ে স্ট্রিং.প্রোটোটাইপকে একটি পদ্ধতি নির্ধারণ করব।
কেনেবেক

14
String.prototype.trim = String.prototype.trim || function trim() { return this.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); };
কোজিরো

3
আমি সন্দেহ করি যে জাভাস্ক্রিপ্টের পারফরম্যান্সে সাম্প্রতিক উন্নতির পরে এই পরীক্ষাটি এখনও প্রাসঙ্গিক বা নির্ভরযোগ্য যেমন এই উত্তরটির সময়ে ছিল।
এডুয়ার্ডো

2
আপনি কেন ডাবল সাদা অক্ষর ব্যবহার করছেন? ওরফে কেন এই রেজেক্স /^\s\s*/এবং এটি এক নয়/^\s*/
26 এ এেমোঞ্জ করুন

কেন trim1এবং trim11?
মার্টি কর্টেজ

68

JQuery ব্যবহার করা যদি একটি বিকল্প হয়:

/**
 * Trim the site input[type=text] fields globally by removing any whitespace from the
 * beginning and end of a string on input .blur()
 */
$('input[type=text]').blur(function(){
    $(this).val($.trim($(this).val()));
});

বা সহজভাবে:

$.trim(string);

48

@ চাওসপ্যান্ডিওন যেমন উল্লেখ করেছেন, String.prototype.trimপদ্ধতিটি ECMAScript 5 ম সংস্করণ নির্দিষ্টকরণের মধ্যে প্রবর্তিত হয়েছে , কিছু বাস্তবায়ন ইতিমধ্যে এই পদ্ধতিটি অন্তর্ভুক্ত করে, তাই সর্বোত্তম উপায় হল নেটিভ বাস্তবায়ন সনাক্ত করা এবং এটি উপলভ্য না হলে কেবল এটি ঘোষণা করা :

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

তারপরে আপনি কেবল:

title = title.trim();

1
সম্পত্তিটি কোনও ফাংশন কিনা তা যাচাই করার জন্য আমি সবসময় কিছুটা বিস্মিত হই। যদি এটি কোনও ফাংশন না হয় তবে সত্যিকারের আচরণ কি এটিকে ওভাররাইট করা? এই ক্ষেত্রে আপনার কোনও ত্রুটি ছুঁড়ে দেওয়া উচিত।
কোজিরো

1
@ কোজিরো, ভাল, সম্ভবত একটি ত্রুটি নিক্ষেপ করা ভাল হবে তবে আমি এটি এর মতো দেখতে পাচ্ছি: আমি একটি অনুমানযুক্ত-শিহরিত শিম করার চেষ্টা করছি , এবং যদি String.prototype.trimএটি কোনও ফাংশন না হয় তবে String.prototype.trimএটি ECMAScript 5 ম সংস্করণে বর্ণিত পদ্ধতি নয় is স্পেসিফিকেশন, স্পেস গ্যারান্টি দেয় যা trimES5 পরিবেশে একটি ফাংশন অবজেক্ট।
সিএমএস

7
throw { name: "UnlikelyPolyfillException", message: "Did someone really write a property on the String prototype named 'trim' that isn't a ECMA 5 compatible shim? Come on now, that's crazy." }
কোজিরো

34

আমি জানি এটি একটি পুরানো পোস্ট, তবে কেবল আমাদের সমাধানটি ভাগ করে নেওয়ার কথা ভেবেছিলাম। সংক্ষিপ্ততম কোডের সন্ধানে (প্রত্যেকে কেবল টর্স রিজেেক্স পছন্দ করে না ), এর পরিবর্তে একজন ব্যবহার করতে পারে:

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

বিটিডাব্লু: ব্লগ.স্টেভলেভিথন.কম - উপরে ভাগ করা লিঙ্কের মাধ্যমে আমি এই একই পরীক্ষাটি চালিয়েছি - দ্রুত জাভাস্ক্রিপ্ট ট্রিম এবং এই প্যাটার্নটি অন্য সমস্ত হ্যান্ডসকে পরাজিত করেছে!

আইই 8 ব্যবহার করে টেস্ট 13 হিসাবে টেস্ট যুক্ত করা হয়েছে। ফলাফলগুলি ছিল:

আসল দৈর্ঘ্য: 226002
ট্রিম 1: 110 মিমি (দৈর্ঘ্য: 225994)
ট্রিম 2: 79 মিমি (দৈর্ঘ্য: 225994)
ট্রিম 3: 172 মিমি (দৈর্ঘ্য: 225994)
ট্রিম 4: 203 মিমি (দৈর্ঘ্য: 225994)
ট্রিম5: 172 মিমি (দৈর্ঘ্য: 225994)
ট্রিম 6: 312 মিমি (দৈর্ঘ্য: 225994)
ট্রিম 7: 203ms (দৈর্ঘ্য: 225994)
ট্রিম 8: 47ms (দৈর্ঘ্য: 225994)
ট্রিম9: 453 মিমি (দৈর্ঘ্য: 225994) ট্রিম 10: 15 মিমি (দৈর্ঘ্য: 225994)
ট্রিম
11: 16 মিমি (দৈর্ঘ্য: 225994)
ট্রিম 12: 31 মিমি (দৈর্ঘ্য: 225994)
ছাঁটাই 13: 0 মিমি (দৈর্ঘ্য: 226002)



11

এখানে, এটি আপনার যা প্রয়োজন তা করা উচিত

function doSomething(input) {
    return input
              .replace(/^\s\s*/, '')     // Remove Preceding white space
              .replace(/\s\s*$/, '')     // Remove Trailing white space
              .replace(/([\s]+)/g, '-'); // Replace remaining white space with dashes
}

alert(doSomething("  something with  some       whitespace   "));

+ s \ s * অপ্রয়োজনীয় বলে মনে হচ্ছে, যেহেতু + s + রয়েছে তবে এটি খানিকটা দ্রুত
ক্যাফজিক

4

জেএসে স্ট্রিংগুলি ছাঁটাইতে আমি অতীতে কয়েকটি পদ্ধতি ব্যবহার করেছি:

String.prototype.ltrim = function( chars ) {
    chars = chars || "\\s*";
    return this.replace( new RegExp("^[" + chars + "]+", "g"), "" );
}

String.prototype.rtrim = function( chars ) {
    chars = chars || "\\s*";
    return this.replace( new RegExp("[" + chars + "]+$", "g"), "" );
}
String.prototype.trim = function( chars ) {
    return this.rtrim(chars).ltrim(chars);
}

RegExp স্ট্রিংয়ের শুরুতে ^[\s*]+মেলে *, যাতে আপনার ফাংশনটি ছাঁটাই "*** Foo"হয় "Foo"
ফারডিনান্দ বায়ার

সম্ভবত :) ভাবছেন কেন কেউ অভিযোগ করেন নি ... অনেক দিন আগে আমি এই কোডটি লিখেছিলাম এবং এটি এন.ইউইকিপিডিয়া.আর / উইকিপিডিয়া: উইকিপিডিয়াতে ব্যবহৃত হয় । বন্ধ উত্স এখন যে আপনি এটি নির্দিষ্ট এটি সুস্পষ্ট।
আজাতোথ

4

এখানে আমার বর্তমান কোডটি রয়েছে, আমি ২ য় লাইনে মন্তব্য করলে ২ য় লাইনটি কাজ করে তবে আমি কীভাবে এটি ছেড়ে দিলে কাজ করি না।

var page_title = $(this).val().replace(/[^a-zA-Z0-9\s]/g, '');
page_title = page_title.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
page_title = page_title.replace(/([\s]+)/g, '-');

২ য় এবং তৃতীয় লাইনটি সরান, এবং পলিজেনিউব্রিকেন্টস, পৃষ্ঠা_শিরোনাম = ট্রিম 1 (পৃষ্ঠা_শিরোনাম) থেকে কোডটি ব্যবহার করুন;
পিপড়া

সুতরাং শেষ পর্যন্ত আপনি এই স্ট্রিংটি পৃথককারী হিসাবে ফাঁকির পরিবর্তে ছাঁটা, আলফা-সংখ্যাসূচক এবং ড্যাশ করার জন্য চেষ্টা করছেন?
ক্যাফগীক

@ চাড হ্যাঁ ফ্লাইতে স্লাগ ইউআরএল তৈরি করতে যাতে ব্যবহারকারীরা দেখতে পাবেন যে তাদের ইউআরএল কেমন হবে। নতুন ব্লগ পোস্ট তৈরি করার সময় ওয়ার্ডপ্রেস কীভাবে এটির অনুরূপ।
জেমস জেফারি


2

jQuery.trim ("হ্যালো, আপনি কেমন আছেন?");

:)


2
দেখে মনে হচ্ছে আপনি কোনও মজাদার বানিয়ে চলেছেন তবে মনে রাখবেন এই মন্তব্যটি পড়া লোকেরা আপনার সমাধানটি ব্যবহার করতে এবং পাশাপাশি চলতে প্ররোচিত হতে পারে।
কমমেডিলিমিটেড হয়েছে

t .Trim ("ব্লেভ ব্লাহ ব্লাহ"); সঠিকভাবে "ব্লেব ব্লাহ ব্লাহ" ফিরিয়ে দেয়
RAY

2

DOM পুরোপুরি লোড হয়ে গেলে আপনি এটি সমস্ত পাঠ্য ক্ষেত্রে যোগ করতে পারেন। আমার কখনই নেতৃত্বের বা পিছনের স্থান জমা দেওয়ার মতো পরিস্থিতি হয়নি, তাই বিশ্বব্যাপী এটি সর্বদা করা আমার পক্ষে কাজ করেছে ...

$(function() { $('input[type=text]').on('blur', function(){
    $(this).val($.trim($(this).val()));
  });
});

jQuery প্রয়োজন। আরেকটি প্রশ্ন (আমি এটি পরীক্ষা করিনি): blurজমা দেওয়ার আগে আসলে কি ঘটে যখন আমি কোন জমিতে থাকি এবং কোনও ফর্ম পাঠাতে <kbd> প্রবেশ করুন </ কেবিডি> চাপুন?
অ্যান্থেস

2

এটিই জাভাস্ক্রিপ্ট আর্কিটেক্ট / গুরু ডগলাস ক্রকফোর্ড পরামর্শ দিয়েছেন।

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

দ্রষ্টব্য: ফাংশন.প্রোটোটাইপের জন্য আপনাকে "পদ্ধতি" নির্ধারণ করতে হবে।

বিকল্পভাবে

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

title.trim();    // returns trimmed title

পর্যবেক্ষণ

সাম্প্রতিক ব্রাউজারগুলিতে, ছাঁটাই পদ্ধতিটি ডিফল্টরূপে অন্তর্ভুক্ত থাকে। সুতরাং আপনি এটি স্পষ্টভাবে যোগ করতে হবে না।

প্রধান ব্রাউজারগুলি ক্রোম, ফায়ারফক্স, সাফারি ইত্যাদি ট্রিম পদ্ধতি সমর্থন করে । Chrome 55.0.2883.95 (64-বিট), ফায়ারফক্স 51.0.1 (64-বিট), সাফারি 10.0 (12602.1.50.0.10) এ পরীক্ষিত।



0

এটির জন্য পুনরাবৃত্তির চেষ্টা

function t(k){ 
    if (k[0]==' ') {
        return t(k.substr(1,k.length));
    } else if (k[k.length-1]==' ') {
        return t(k.substr(0,k.length-1));
    } else {
        return k;
    }
}

এভাবে কল করুন:

t("      mehmet       "); //=>"mehmet"

আপনি যদি স্পেসিফিক চরগুলি ফিল্টার করতে চান তবে আপনি মূলত একটি তালিকা স্ট্রিং সংজ্ঞায়িত করতে পারেন:

function t(k){
    var l="\r\n\t "; //you can add more chars here.
    if (l.indexOf(k[0])>-1) {
        return t(k.substr(1,k.length));
    } else if (l.indexOf(k[k.length-1])>-1) {
        return t(k.substr(0,k.length-1));
    } else {
        return k;
    }
}

যা বলা হচ্ছে তার থেকে একটি সূক্ষ্ম তফাত আছে! আপনি একটি স্থান জন্য যাচাই করছি ' ', কিন্তু প্রশ্নটি সাধারণভাবে সাদা স্থান সহ প্রায় "\n", "\t"এবং অন্যান্য অ মুদ্রণযোগ্য অক্ষর আছে যা Regex দ্বারা মেলানো হয় /\s/
এএমথেস

তারপরে আপনি "if (" "t \ r \ n" .indexOf (k [0])> - 1) "হিসাবে কাজ করলেও এটি সম্পাদনা করতে পারেন, এটি ইতিমধ্যে নির্দিষ্ট ধরণের।
mguven গেভেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.