2010-10-18 27 views
4

J'ai cherché autour beaucoup pour ceci et ne peux pas trouver un exemple spécifique de ce que j'essaye de faire. Fondamentalement, je veux obtenir la valeur d'une zone de texte, par le nom de la zone de texte (pas id). Ensuite, je veux supprimer TOUS les espaces, pas seulement le début ou la fin, mais aussi les espaces dans le texte. Par exemple, pour ce code html:Javascript pour enlever des espaces d'une valeur de zone de texte

<INPUT style="TEXT-ALIGN: right;" onkeyup="fieldEdit();" onchange="fieldChange();" NAME="10010input" VALUE="4 376,73" readonly > 

J'ai ce javascript:

var val = document.CashSheet.elements["10010input"].value; 
val2 = val.replace(<someregex>, ''); 
alert(val2); 

Mais j'ai essayé beaucoup disponibles expressions regex qui éliminent tous les espaces, mais tout ne semble enlever les espaces de fuite , par exemple, la valeur au-dessus de 4 376,73 devrait se lire 4376,73 dans l'alerte ci-dessus, mais ce n'est pas le cas. Après avoir regardé dans cette expression normale pour supprimer des espaces d'un champ de texte, le contenu ne fonctionne pas et je crois que c'est parce qu'il est peuplé dans les paramètres localisés polonais sur le serveur Web. Ce que j'ai/char exp de regex dois-je capturer pour un "espace polonais" pour ainsi dire, en ascii il se lève comme 20 mais l'exp regex que la plupart des gens suggèrent pour les espaces ne le capture pas.

Répondre

7

Vous pouvez utiliser document.getElementsByName pour obtenir l'élément sans passer par le formulaire, tant qu'aucun autre élément de la page n'a le même nom. Pour remplacer tous les espaces, il suffit d'utiliser une expression régulière avec le drapeau global fixé dans la méthode de valeur de l'élément replace():

var el = document.getElementsByName("10010input")[0]; 
var val = el.value.replace(/\s/g, ""); 
alert(val); 
+0

Salut Tim, question rapide, je suis en train ce que vous proposez pour un champ de texte contenu mais son ne fonctionne pas et je crois que c'est parce qu'il est peuplé dans les paramètres localisés polonais sur le serveur web. Quel personnage dois-je capturer pour un "espace polonais" pour ainsi dire, dans ascii il se lève comme 20 mais l'expression rationnelle ne le capture pas, mais capturera d'autres espaces que j'ai mis dans une chaîne moi-même. – TMS

+0

Vraiment? Etes-vous sûr que ce n'est pas 20 en hexadécimal (le caractère d'espace normal est 20 en hexadécimal)? Si vous devez spécifier une liste de caractères d'espace pour correspondre, vous pouvez faire quelque chose comme 'new RegExp (" [\\ s \ u1234 \ u4321] "," g ")' au lieu de '/ \ s /'. –

+0

Oui, son retour comme "4 376", si j'essaye cette regex, ça ne fait rien mais si j'ajoute "aa" à la fin de cette chaîne, la regex le fera sortir comme ça: "4 376aa "donc ça marche sur mon espace mais pas sur l'espace qui revient du serveur web polonais. Je pense que c'est un caractère d'espace Unicode différent, que je vais essayer de trouver lequel il est alors utiliser votre nouvel appel RegExp. – TMS

6

Vous devez « généraliser » que regexp vous utilisez donc il est appliqué à tous les matches au lieu de juste le premier. Comme ceci:

val = val.replace(/\s/g, '') 

Notez le 'g' qui modifie l'expression rationnelle de sorte qu'elle devienne "générale".

+2

+1 pour la classe de caractères '\ s'; J'utiliserais probablement le travail "global" au lieu de "général" –

+1

@Michael: Pourquoi '\ s' est-il significativement meilleur qu'un simple caractère d'espace ici? Il ne peut pas y avoir de caractères de saut de ligne dans un '' et les espaces insécables ne sont généralement pas typés dans une zone de texte. –

+0

@Michael Haren: Je savais que ça commençait par un 'g', mais je ne savais pas lequel c'était exactement. @Tim Down: Je pense que \ s est plus lisible, n'est-ce pas? –

0

vous pouvez utiliser cette méthode jQuery http://api.jquery.com/jQuery.trim/
val = $.trim(val); OU val = jQuery.trim(val);

+0

Ceci supprime uniquement les espaces de début et de fin et non les espaces Unicode polonais dans une chaîne :( – TMS

3

Voici une fonction que j'utilise pour remplacer les espaces.

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

Une autre option, plus jQuery'ish:

$(".stripspaces").keyup(function() { 
    $(this).val($(this).val().replace(/\s/g, "")); 
}); 
+0

Trop de jQuery ... [Quand utiliser Vanilla JavaScript vs jQuery?] (Http://stackoverflow.com/questions/4651923/fr -to-use-vanilla-javascript-vs-jquery) De plus, toutes les réponses à cette page ont un défaut majeur: en plaçant toujours la valeur, le curseur se déplace toujours jusqu'à la fin, même s'il n'y a pas d'espace dans la boîte. meilleure solution impliquerait d'abord vérifier la valeur de l'entrée –

+0

merci l'homme cela a fonctionné pour moi – humphrey

2

Essayez cette

<script language="JavaScript"> 
function RWS(str){ 
    return str.replace(/^\s+/,"").replace(/\s+$/,"").replace(/\s+/g," "); 
} 
</script> 

<form name=f1ex> 
<textarea name="t2" rows="5" onChange="this.value=RWS(this.value)"></textarea> 
</form>