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?
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".
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);
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();
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)
ECMAScript 5 supporte trim
et ceci a été implémenté dans Firefox.
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 "));
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, '-');
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
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);
}
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.
String.prototype.trim = function () {
return this.replace(/^\s+|\s+$/g, '');
};
title.trim(); // returns trimmed title
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 ).
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()));
});
});
jQuery.trim ("bonjour, comment allez-vous?");
:)
var Word = " testWord "; //add here Word or space and test
var x = $.trim(Word);
if(x.length > 0)
alert('Word');
else
alert('spaces');
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;
}
}