web-dev-qa-db-fra.com

Couper les espaces à partir du début et de la fin de la chaîne

J'essaie de trouver un moyen de réduire les espaces à partir du début et de la fin de la chaîne de titre. J'utilisais ceci, mais cela ne semble pas fonctionner:

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

Des idées?

148
James Jeffery

Remarque: à partir de 2015, tous les principaux navigateurs (y compris IE> = 9) prennent en charge String.prototype.trim () . Cela signifie que, dans la plupart des cas d'utilisation, le simple fait de str.trim() constitue le meilleur moyen de répondre à la question posée. 


Steven Levithan a analysé de nombreuses implémentations de trim en Javascript en termes de performances.

Sa recommandation est:

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

pour "une implémentation générale multi-navigateur rapide", et

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

msgstr "si vous voulez gérer les longues chaînes de manière exceptionnellement rapide dans tous les navigateurs".

Références

210

Si jQuery est une option:

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

ou simplement:

$.trim(string);
68
Stone

Comme @ChaosPandion mentionné, la méthode String.prototype.trim a été introduite dans ECMAScript 5ème édition Spécification, certaines implémentations incluent déjà cette méthode, le meilleur moyen est donc de détecter l'implémentation native et de la déclarer seulement s'il n'est pas disponible:

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

Ensuite, vous pouvez simplement:

title = title.trim();
48
CMS

Je sais que ceci est un ancien post, mais je pensais que je partagerais notre solution. Dans la quête du code le plus court (tout le monde ne se contente pas de love terse regex), on pourrait plutôt utiliser:

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

BTW: J'ai exécuté le même test via le lien partagé ci-dessus blog.stevenlevithan.com - Trim plus rapide avec JavaScript et ce modèle a battu tous les autres MAINS!

En utilisant IE8, ajouté test en tant que test13. Les résultats ont été:

Longueur originale: 226002
trim1: 110ms (longueur: 225994)
trim2: 79ms (longueur: 225994)
trim3: 172ms (longueur: 225994)
trim4: 203ms (longueur: 225994)
trim5: 172ms (longueur: 225994)
trim6: 312ms (longueur: 225994)
trim7: 203ms (longueur: 225994)
trim8: 47ms (longueur: 225994)
trim9: 453ms (longueur: 225994)
trim10: 15ms (longueur: 225994)
trim11: 16ms (longueur: 225994)
trim12: 31ms (longueur: 225994)
trim13: 0ms (longueur: 226002)

34
user590028

ECMAScript 5 supporte trim et ceci a été implémenté dans Firefox.

garniture - MDC

11
ChaosPandion

Ici, cela devrait faire tout ce dont vous avez besoin

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   "));
11
CaffGeek

Voici mon code actuel, la deuxième ligne fonctionne si je commente la troisième ligne, mais ne fonctionne pas si je le laisse tel quel.

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, '-');
4
James Jeffery

Utilisez simplement la méthode string.trim(). Il est supporté par tous les principaux navigateurs . Référence ici: http://www.w3schools.com/jsref/jsref_trim_string.asp

4
Leo

Voici quelques méthodes que j'ai utilisées dans le passé pour couper les chaînes dans js:

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);
}
4
azatoth

C'est ce que suggère l'architecte/gourou de JavaScript, Douglas Crockford.

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

Remarque: vous devez définir "méthode" pour Function.prototype.

Alternativement

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

title.trim();    // returns trimmed title

Observation

Dans les navigateurs récents, la méthode trim est incluse par défaut. Donc, vous n'avez pas à l'ajouter explicitement.

Principaux navigateurs Chrome, Firefox, Safari, etc. prend en charge trim method . Vérifié dans Chrome 55.0.2883.95 (64 bits), Firefox 51.0.1 (64 bits), Safari 10.0 (12602.1.50.0.10 ).

2
mythicalcoder

Lorsque le DOM est complètement chargé, vous pouvez l'ajouter à tous les champs de texte. Je n'ai jamais eu une situation où je devais soumettre un espace de début ou de fin, alors le faire tout le temps a globalement fonctionné pour moi ...

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

jQuery.trim ("bonjour, comment allez-vous?");

:)

2
G-h-o-s-t
var Word = " testWord ";   //add here Word or space and test

var x = $.trim(Word);

if(x.length > 0)
    alert('Word');
else
    alert('spaces');
1
Jitendra

un essai récursif pour cela 

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

appeler comme ça:

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

si vous voulez filtrer les caractères spécifiques, vous pouvez définir une chaîne de liste:

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;
    }
}
0
mguven guven