web-dev-qa-db-fra.com

Couper la chaîne en JavaScript?

Comment puis-je couper une chaîne en JavaScript?

1259
Vinod

Tous les navigateurs depuis IE9 + ont trim() .

Pour les navigateurs qui ne supportent pas trim(), vous pouvez utiliser ce polyfill à partir de 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, '');
        };
    })();
}

Regarde ça:

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

Le rognage de jQuery est pratique si vous utilisez déjà ce framework. 

$.trim('  your string   ');

J'ai tendance à utiliser souvent jQuery, il est donc naturel que couper les cordes avec cela soit naturel. Mais il est possible qu’il y ait une réaction négative contre jQuery? :) 

477
barneytron

Bien qu'il y ait beaucoup de réponses correctes ci-dessus, il convient de noter que l'objet String en JavaScript a une méthode native .trim() à partir de ECMAScript 5 Ainsi, idéalement, toute tentative de prototype de la méthode trim devrait réellement vérifier si elle existe déjà en premier.

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

Ajouté nativement dans: JavaScript 1.8.1/ECMAScript 5

Ainsi soutenu dans:

Firefox: 3.5+

Safari: 5+

Internet Explorer: IE9 + (en mode standard uniquement!) http://blogs.msdn.com/b/ie/archive/2010/06/25/enhanced-scripting-in-ie9-ecmascript-5 -support-and-more.aspx

Chrome: 5+

Opéra: 10.5+

Tableau de support ECMAScript 5: http://kangax.github.com/es5-compat-table/

162
scunliffe

Il y a beaucoup d'implémentations qui peuvent être utilisées. Le plus évident semble être quelque chose comme ceci:

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

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

Version simple ici Qu'est-ce qu'une fonction générale pour JavaScript trim?

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

Je sais que cette question a été posée trois ans en arrière. Maintenant, String.trim() a été ajouté de manière native dans JavaScript. 

document.getElementById("id").value.trim();
28
Vijin Paulraj

Flagrant Badassery comporte 11 versions différentes avec des informations de référence:

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

Sans surprise, les expressions rationnelles sont plus lentes que les boucles traditionnelles.


Voici mon personnelle. Ce code est vieux! Je l'ai écrit pour JavaScript1.1 et Netscape 3 et il n'a été que légèrement mis à jour depuis. (Original utilisé 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);
}
20
Tero

Si vous utilisez jQuery, utilisez la fonction jQuery.trim(). Par exemple:

if( jQuery.trim(StringVariable) == '')
20
Able Alias

Utilisez les méthodes JavaScript natives: String.trimLeft() , String.trimRight() et String.trim() .


String.trim() est pris en charge dans IE9 + et tous les autres navigateurs principaux :

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


String.trimLeft() et String.trimRight() ne sont pas standard, mais sont supportés dans tous les principaux navigateurs sauf IE

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


IE support est facile avec un polyfill cependant:

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

Maintenant, vous pouvez utiliser string.trim () qui est une implémentation Javascript native

var orig = "   foo  ";
console.log(orig.trim());//foo

Voir également 

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

Volé sans vergogne à Matt duereg .

10
yckart

Code de rognage de 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;
  };

})();

et appelez-le en tant que trim(" hello ")

7
rab

Voici un moyen très simple:

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

utilisez simplement le code

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

Support du navigateur

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

Pour l'ancien navigateur, ajouter un prototype

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

Vous pouvez simplement déclarer votre variable en tant que chaîne et utiliser sa fonction trim: 

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

Aujourd'hui, presque tous les navigateurs supportent String.prototype.trim() .

Vous l'utilisez comme ceci:

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

Si vous devez toujours prendre en charge un ancien navigateur qui ne prend pas cette fonctionnalité en charge, il s’agit de a polyfill suggéré par le MDN:

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

Des réponses précédentes, l’ajout de l’indicateur m diffère. 

Le drapeau m va rechercher le texte de plusieurs linéaires. Dans ce mode, les marques de début et de fin du modèle (^$) sont insérées avant et après le caractère de nouvelle ligne (\n).

1
simhumileco

J'ai une lib qui utilise trim. donc résolu en utilisant le code suivant.

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

Utiliser trim() sur String qui est un natif pourrait être le moyen le plus simple:

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

console.log(trimmedFullName);

0
Alireza

La voici dans TypeScript:

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

Il reviendra à l'expression régulière si le prototype natif n'est pas disponible.

0
Joseph Lennox

J'avais écrit cette fonction pour trim, quand la fonction .trim () n'était pas disponible dans JS en 2008. Certains des navigateurs plus anciens ne supportent toujours pas la fonction .trim () et j'espère que cette fonction pourra aider quelqu'un.

TRIM FUNCTION

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

Explication : La fonction trim () accepte un objet chaîne, supprime les espaces blancs de début et de fin (espaces, tabulations et nouvelles lignes) et renvoie la chaîne coupée. Vous pouvez utiliser cette fonction pour supprimer les entrées de formulaire afin d’assurer l’envoi de données valides.

La fonction peut être appelée de la manière suivante à titre d'exemple.

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

Je ne sais pas quels bugs peuvent se cacher ici, mais j'utilise ceci:

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

Ou ceci, si le texte contient entre:

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

Un autre essai:

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

Vous pouvez le faire en utilisant le JavaScript simple:

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

Voici quelques exemples supplémentaires de couper une chaîne à l'aide de JavaScript .

0
user5846985