Tekenreeks in JavaScript inkorten?

Hoe trim ik een string in JavaScript? Dat wil zeggen, hoe verwijder ik alle witruimte aan het begin en het einde van de tekenreeks in JavaScript?


Antwoord 1, autoriteit 100%

Alle browsers sinds IE9+ hebben trim()methode voor strings:

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

Voor die browsers die trim()niet ondersteunen, kunt u deze polyfill van 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, '');
        };
    })();
}

Dat gezegd hebbende, als jQuerywordt gebruikt, is $.trim(str)ook beschikbaar en behandelt het undefined/null.


Zie dit:

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

Antwoord 2, autoriteit 53%

De trim van jQueryis handig als je dat framework al gebruikt.

$.trim('  your string   ');

Ik heb de neiging om jQuery vaak te gebruiken, dus het is voor mij normaal om er strings mee te gebruiken. Maar het is mogelijk dat er verzet is tegen jQuery? 🙂


Antwoord 3, autoriteit 18%

Hoewel er hierboven een heleboel juiste antwoorden zijn, moet worden opgemerkt dat het String-object in JavaScript een native .trim()-methode heeft vanaf ECMAScript 5. Dus idealiter zou elke poging om een prototype van de trimmethode te maken eerst moeten controleren of deze al bestaat.

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

Native toegevoegd in:
JavaScript 1.8.1 / ECMAScript 5

Dus ondersteund in:

Firefox: 3.5+

Safari: 5+

Internet Explorer: IE9+(alleen in standaardmodus!) 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-ondersteuningstabel: http://kangax.github.com/es5-compat- tafel/


Antwoord 4, autoriteit 14%

Er zijn veel implementatiesdie kunnen worden gebruikt. Het meest voor de hand liggende lijkt zoiets als dit te zijn:

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

Antwoord 5, autoriteit 5%

Eenvoudige versie hier Wat is een algemene functie voor JavaScript-trim?

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

Antwoord 6, autoriteit 3%

Ik weet dat deze vraag drie jaar geleden is gesteld. Nu is String.trim()standaard toegevoegd aan JavaScript. U kunt bijvoorbeeld direct trimmen als volgt:

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

Antwoord 7, autoriteit 2%

Als je jQuery gebruikt, gebruik dan de functie jQuery.trim(). Bijvoorbeeld:

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

Antwoord 8, autoriteit 2%

Flagrant Badasseryheeft 11 verschillende afwerkingen met benchmarkinformatie:

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

Het is niet verrassend dat regexp-gebaseerde langzamer zijn dan traditionele loop.


Hier is mijn persoonlijke. Deze code is oud! Ik heb het geschreven voor JavaScript1.1 en Netscape 3 en het is sindsdien slechts licht bijgewerkt. (Oorspronkelijk gebruikte 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);
}

Antwoord 9, autoriteit 2%

Gebruik de native JavaScript-methoden: String.trimLeft(), String.trimRight()en String.trim().

String.trim()wordt ondersteund in IE9+ en alle andere belangrijke browsers:

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

String.trimLeft()en String.trimRight()zijn niet-standaard, maar worden ondersteund in alle belangrijke browsers behalve IE

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

IE-ondersteuning is echter eenvoudig met een 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, '');
        };
    }
}

Antwoord 10

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

schaamteloos gestolen van Matt Duereg .


Antwoord 11

Trim code van Angular JS project

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

en bel het als trim(" hello ")


Antwoord 12

Gebruik eenvoudigweg

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

Browserondersteuning

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

Voor oude browser Toevoegen prototype

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

Antwoord 13

Hier is een heel eenvoudige manier:

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

Antwoord 14

Ik heb een lib die versiering gebruikt. dus loste het op door de volgende code te gebruiken.

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

Antwoord 15

U kunt het doen met behulp van het gewone JavaScript:

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

Antwoord 16

Weet u niet welke insecten hier kunnen verbergen, maar ik gebruik dit:

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

of dit, als tekst invoert:

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

Nog een keer proberen:

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

Antwoord 17

Hier is het in typescript:

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

Het valt terug naar de regex als het native prototype niet beschikbaar is.


Antwoord 18

Ik had deze functie geschreven voor Trim, toen de functie .Rim () niet in 2008 in JS-weg beschikbaar was. Sommige van de oudere browsers ondersteunen de functie .Rim () en ik hoop dat deze functie kan helpen iemand.

Trimfunctie

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

Uitleg : De functie Trim () Accepteer een stringobject en verwijder eventuele start- en achterruimten (spaties, tabbladen en newlines) en retourneer de getrimde string. U kunt deze functie gebruiken om formulieringangen te trimmen om ervoor te zorgen dat geldige gegevens worden verzonden.

De functie kan als voorbeeld op de volgende manier worden aangeroepen.

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

Antwoord 19

de mijne gebruikt een enkele regex om te zoeken naar gevallen waarin trimmen nodig is, en gebruikt de resultaten van die regex om de gewenste substringgrenzen te bepalen:

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
}

de enige ontwerpbeslissing die hierbij kwam kijken, was het gebruik van een substring om de uiteindelijke opname uit te voeren. s/\?:// (maak de middelste term capture) en en het vervangende fragment wordt:

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

er zijn twee prestatieweddenschappen die ik heb gedaan in deze impls:

  1. kopieert de substring-implementatie de gegevens van de originele string? zo ja, in de eerste, wanneer een string moet worden bijgesneden, is er een dubbele traversal, eerst in de regex (die hopelijk gedeeltelijk kan zijn), en ten tweede in de substring-extractie. hopelijk verwijst een substringimplementatie alleen naar de originele string, dus bewerkingen zoals substring kunnen bijna gratis zijn. vingers gekruist

  2. Hoe goed is de opname in de regex-implicatie? De middellange termijn, de uitvoerwaarde, kan mogelijk zeer lang zijn. Ik was niet klaar om te banken dat alle regio-implicaties ‘vastleging niet op een paar honderd KB-invoeropname zouden kunnen, maar ik heb ook niet getest (te veel runtimes, sorry!). De tweede loopt altijd een opname; Als uw motor dit kan doen zonder een hit te maken, gebruikt u misschien het gebruik van enkele van de bovenstaande string-roping-technieken, zoals het zeker gebruikt!


Antwoord 20

voor IE9 + en andere browsers

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

Other episodes