Newsgroup: it.comp.lang.javascript
Titolo: cerco funzione x eliminare spazi

Salve a tutti,
sono un newbie di javascript e nonostante abbia cercato in un grosso manuale
in biblioteca, nella guida di riferimento scaricata, nonché in questo
newsgroup.... non riesco a risolvere il mio problema.
Mi chiedo se esiste una funzione (equivalente a "trim" di php) che elimina
gli spazi (o caratteri vuoti che dir si voglia) iniziali e finali in una
stringa.
Mi spiego meglio: se qualcuno in una form inserisce qualcosa e io faccio il
controllo sul numero dei caratteri, anche se inseriscono una stringa con
solo spazi vuoti la mia funzione purtroppo la accetta. Vorrei evitare questo
e quindi fare un controllo su una stringa precedentemente depurata del
superfluo!
Grazie in anticipo.

 }
grazie per la velocità e il resto, il problema é che mi restituisce errore,
Mozilla dice che gli manca una ).
Ho controllato la sintassi di replace:
stringa.replace(espressioneReg, stringaSostituzione)
che devo fare? al posto del + devo mettere la virgola? oppure devo
aggiungere ,''?
PS: per curiosità visto che sto imparando: cos'é che gli dice inizio stringa
o fine stringa in quella sintassi?

Mi rendo conto che forse non è a qualcosa di così elaborato che pensavi, ma
faccio la seguente proposta (come si può notare, si tratta di richiamare la
finzione togliespazi con parametro la stringa da esaminare, e in output
viene restituita la nuova variabile nuovastringa, della lunghezza dovuta):
<HTML>
<HEAD>
<SCRIPT>
<!--
function togliespazi(stringa)
 {
  nstringa=''
  trovato=0
  primo=0
  ultimo=0
  lunghezza=stringa.length
  for (i=1; i<lunghezza+1; i++)
   {
    c=stringa.slice(i-1,i)
    j=''
    if (c==" ")
     {
      if (trovato==0) {primo=i}
     }
    else
     {
      trovato++
      ultimo=i
     }
   }
  nuovastringa=stringa.slice(primo,ultimo)
 }
//prova di funzionalità - inizio righe da eliminare
stringa='ab cd  ef    g '
togliespazi(stringa)
alert('"'+nuovastringa+'"')
stringa='  df rtt   '
togliespazi(stringa)
alert('"'+nuovastringa+'"')
stringa='   123445  '
togliespazi(stringa)
alert('"'+nuovastringa+'"')
stringa=' 4 56  '
togliespazi(stringa)
alert('"'+nuovastringa+'"')
//prova di funzionalità - fine righe da eliminare
//-->
</SCRIPT>
</HEAD>
<BODY>
Prova
</BODY>
</HTML>

Non mi sembra che funzioni: toglie al massimo uno spazio. Allego versione
adattata, ma sostanzialmente fedele, per poter verificare l'errore:
<HTML>
<HEAD>
<SCRIPT>
<!--
function togliespazi(stringa)
 {
  return
stringa.toString().replace(/^[\t\r\n]+/,'').replace(/[\t\r\n]+$/,'')
 }
//prova di funzionalità - inizio righe da eliminare
stringa='ab cd  ef    g '
togliespazi(stringa)
alert('"'+stringa+'"')
stringa='  df rtt   '
togliespazi(stringa)
alert('"'+stringa+'"')
stringa='   123445  '
togliespazi(stringa)
alert('"'+stringa+'"')
stringa=' 4 56  '
togliespazi(stringa)
alert('"'+stringa+'"')


Si prega di togliere l'istruzione nstringa='' dalla mia proposta, in quanto
del tutto inutile, anche se non fa nessun danno (era un residuo di un'altro
javascript che avevo predisposto precedentemente per eliminare tutti gli
spazi di una stringa).
Chiedo scusa.


Chiedo scusa.
Marco


Niente, mi ero dimenticato di togliere anche j=''
Ripropongo versione corretta (ripeto, non che la precedente non facese il
suo lavoro, ma erano presenti due istruzioni del tutto inutili):
<HTML>
<HEAD>
<SCRIPT>
<!--
function togliespazi(stringa)
 {
  trovato=0
  primo=0
  ultimo=0
  lunghezza=stringa.length
  for (i=1; i<lunghezza+1; i++)
   {
    if (stringa.slice(i-1,i)==" ")
     {
      if (trovato==0) {primo=i}
     }
    else
     {
      trovato=1



questa di Marco Balestra
function trim(x) {
return x.toString().replace(/^[ \t\r\n]+/,'').replace(/[ \t\r\n]+$/,'');
}
Mi sembra che la differenza sia tutta nell'espressione regolare, in
quest'ultima c'é lo spazio in piů.
Le ho provate entrambe e mi sembra che quest'ultima sia piů efficace e
funzionante.
Marco (senza cognome :-)) dagli un'occhiata, non capisco perché dici che non
elimini piů di uno spazio: giusto per controllare se ci sono delle eccezioni
per cui non funziona.
Grazie a entrambi! Siete MiTTTici!
Mark Renton

No, credo di essermi spiegato male:
non č la mia proposta (che invece č quella qui sotto, ovvero il messaggio
delle 15,24) ma proprio quella di Marco Balesta. Dove, in pratica ho solo
cambiato i nomi delle variabili per effettuare delle prove. Il tutto per
dimostrare che, nella suddetta proposta, quando una stringa inizia o termina
con 2 o piů spazi, ne viene eliminato uno solo. Prova con una stringa tipo '
1234           ': il risultato dovrebbe essere '1234', mentre diventa '
1234          '. Se provi con '                ' il risultato, anzichč
essere '', viene '              '.
Nella mia proposta delle 15,24, sebbene piů elaborata, invece, questo
problema non sorge: '     1234           ' viene correttamente trasformato
in '1234', '              ' in '', come mi sembrava di aver capito che
volessi tu.
Ciao
Marco

> L'hai riscritta para para senza lo spazio, come vuoi che vada? :-)
Quale spazio manca, esattamente?

Ho trovato l'errore: non nella funzione, ma nel modo in cui avevo verificato
l'output.
Dato che la function togliespazi termina con return stringa, non dovevo
(come avevo erroneamente fatto) richiamarla con:
togliespazi(stringa)
alert(stringa)
ma con:
stringa1=togliespazi(stringa2)
alert(stringa1)
Confermo che effettivamente la proposta di Balestra, testata corettamente,
funziona, mi cospargo il capo di cenere per la c...ata che ho scritto piů
su, e chiedo venia, ma stavo solo cercando di capire bene il meccanismo (non
si sa mai, dovesse sevirmi in futuro...).
Ciao
Marco

 si sa mai, dovesse sevirmi in futuro...).
Figurati! E' tutta roba costruttiva... oggi ho imparato qualcosa su  come
costruire le espressioni regolari e che nella programmazione ad oggetti
basta poco per applicare 2 funzioni alla stessa variabile!
Non é poco per uno che di programmazione ad oggetti deve capire ancora un
sacco di cose! ;)
Grazie a tutti! Per Balestra: bello il tuo sito, se sviluppato a dovere può
essere un'ottima fonte di lavoro, complimenti!
Ciao a tutti
    Mark Renton