Page 1 sur 1

trim() en javascript

Posté : 07 nov. 2007, 01:25
par jojolapine
Bonsoir à tous,
Je suis en train de me faire quelques fonctions javascript, comme str_replace de php ou autre, et là j'ai besoin de créer la fonction trim de php...
Alors j'ai bien sûr chercher sur le web et j'ai trouver des réponses mais elles ne me satisfont pas entièrement...
En fait je n'ai trouvé que des trim qui marchent avec l'espace...
Donc j'ai essayer de modifier les scripts, mais sans succès, voici ce que j'ai testé:

Code : Tout sélectionner

function trim(str,chr){ //gestion du paramètre facultatif chr if(typeof(chr)=='undefined'){ chr='\s'; } return str.replace('/(^'+chr+'*)|('+chr+'*$)/g',''); }
Mais ça ne marche pas, car normalement une expression régulière en javascript n'est pas une chaine de caractères...
Donc en gros ma question serait comment construire une rexexp dynamique...
Merci d'avance ;)

Posté : 07 nov. 2007, 08:12
par Cyrano
Regarde ceci.

Avec new RegExp, tu peux construire dynamiquement un masque, exemple :

Code : Tout sélectionner

<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" /> <title>Trim en JS</title> <script type="text/javascript"> /* <![CDATA[ */ /** * Fonction de suppression des espaces surnuméraires (ou autres caractères) en début et en fin de chaine. * @param String chaine Chaine de caractères à traiter. OBLIGATOIRE * @param String Chaine à supprimer FACULTATIF */ function trim(chaine) { if(trim.arguments.length > 1) { var str = trim.arguments[1]; expreg = new RegExp('(^'+ str +'*)|('+ str +'*$)', 'g'); } else { expreg = /(^\s*)|(\s*$)/g; } return chaine.replace(expreg,''); } /* ]]> */ </script> </head> <body> <script type="text/javascript"> /* <![CDATA[ */ var chaine = ' un test de suppressions'; var test1 = trim(chaine); var test2 = trim(chaine, 's'); alert('Suppression des espaces en début et fin de chaine :\n|'+ test1 +'|'); alert('Suppression des "s" en début et fin de chaine :\n|'+ test2 +'|'); /* ]]> */ </script> </body> </html>

Posté : 07 nov. 2007, 11:13
par jojolapine
Bonjour,
et merci pour ta réponse, c'était ce que je souhaitais faire...
Cependant l'exemple tel quel ne fonctionne pas chez, je croit que c'est en rapport avec la méthode de gestion des arguments facultatifs...
J'ai remis mon typeofundefined et ça fonctionne... :k
Je sais pas trop pourquoi, d'autant plus que je n'ai aucun message d'erreur...

Posté : 07 nov. 2007, 11:16
par Cyrano
Bizarre, j'ai fait ça rapidement avant d'aller au bureau ce matin, mais ça fonctionnait aussi bien sous IE que sous Firefox... avec quel navigateur (et quelle version) as-tu testé ce bout de code ?

Posté : 07 nov. 2007, 11:19
par jojolapine
Alors pour le navigateur, c'est firefox 2.0.0.8 pour linux...
C'est peut-être à cause de cette version de firefox? je vais la mettre à jour de ce pas...

Posté : 07 nov. 2007, 11:24
par Cyrano
Ça aurait probablement même fonctionné sous FF1.5 :-k

Par curiosité, je viens de tester ce code tel quel (sans y changer la moindre virgule) sous Firefox (2.0.0.9), IE6, Opera et même Safari (Windows) et dans tous les cas j'obtiens bien le résultat attendu à savoir deux alertes successives, la première affichant entre pipes (|) la chaine sans espaces à la fin ni au début, et la seconde sans "s".

Posté : 07 nov. 2007, 11:35
par jojolapine
je disais que c'était peut-être à cause de firefox 2.0.0.8 à cause de ça: http://www.phpfrance.com/forums/voir_sujet-33655.php
je suis en traind e faire la mise à jour, on verra bien ;)

Posté : 07 nov. 2007, 16:01
par Invité
Tiens, en fouillant un peu Internet, je suis tombé un peu par hasard sur ça, c'est sympa parce que ça rajoute en fait deux autres fonctions complémentaires : rtrim et ltrim . Un peu remis en forme, ça donne ceci :

Code : Tout sélectionner

/** * Javascript trim, ltrim, rtrim * Fonctions de suppression des espaces surnuméraires (ou autres caractères) * en début et en fin de chaine. * trim va faire appel à deux autres méthodes rtrim et ltrim qui éventuellement * restent accessibles individuellement. * * Source : * http://www.webtoolkit.info/ * * @param {String} str Chaine de caractères à traiter. OBLIGATOIRE * @param {String} chars Chaine à supprimer (par défaut, espace) FACULTATIF * @return {String} */ function trim (str, chars) { return ltrim(rtrim(str, chars), chars); } function ltrim (str, chars) { var car = (chars != undefined) ? chars : "\\s"; return str.replace(new RegExp("^[" + chars + "]*", "g"), ""); } function rtrim (str, chars) { var car = (chars != undefined) ? chars : "\\s"; return str.replace(new RegExp("[" + chars + "]*$", "g"), ""); }
Enjoy ! :)

Posté : 07 nov. 2007, 16:06
par Truc
Tiens, en fouillant un peu Internet, je suis tombé un peu par hasard
Joli passe temps fouiller sans savoir ce qu'on cherche réellement :lol:

Posté : 07 nov. 2007, 16:09
par Cyrano
Oups, je m'étais pas connecté.

En fait je fouillais sur autre chose et il s'est trouvé que je suis tombé dessus. Comme c'était de circonstance, j'en ai profité ;)

Posté : 08 nov. 2007, 14:23
par Cyrano
Bon alors finalement : [Résolu] :?:

Posté : 16 janv. 2009, 22:54
par Invité
En fouillant sur le net et en tombant par hasard sur ce sujet, j'ai trouvé ces petites fonctions intéressantes mais... j'ai comme l'impression qu'il y a une petite erreur : elles initialisent une variable "car" pour ensuite toujours utiliser "chars" dans la regexp !

Comme tout celà avait pourtant l'air très propre et bien fait, tellement qu'on a envie de copier-coller le code sans chercher à comprendre, je me permets d'ajouter les corrections que je suppose justes :

Code : Tout sélectionner

function ltrim (str, chars) { var car = (chars != undefined) ? chars : "\\s"; return str.replace(new RegExp("^[" + car + "]*", "g"), ""); } function rtrim (str, chars) { var car = (chars != undefined) ? chars : "\\s"; return str.replace(new RegExp("[" + car + "]*$", "g"), ""); }

Re: trim() en javascript

Posté : 05 mars 2011, 02:01
par Armenak
Superbe, merci!!