Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    \n a fine elemento di un array solo in IE

    Ciao a tutti, spero possiate aiutarmi

    vorrei costruire uno script molto semplice che converte una stringa (prelevata da un campo textarea) in un array. Ogni riga della stringa deve essere un elemento dell'array.
    Il problema è che dopo lo split('\n') solo in IE alla fine dell'elemento dell'array sembra comparire un \n perchè se provo ad aggiungere qualcosa dopo si vede che va in una nuova riga

    Spero di essermi spiegato bene, se non fosse così per favore chiedetemi spiegazioni

    codice:
    <textarea id="1" cols="20" rows="5">
    riga1
    riga2
    riga3
    </textarea>
    <input type="button" value="invia" onclick="funzione(document.getElementById('1').value)" />
    <script>
    function funzione(t1){
    var array1 = t1.split('\n');
    alert(array1[0]+'fondo');
    }
    </script>
    Se questo script si prova prima in IE e poi in Firefox o Google Chrome, si nota che solo in IE la parola 'fondo' è in una nuova riga

  2. #2
    ehm... beh, molto probabilmento IE utilizza il separatore per le linee di Windows ( \r\n ) anziché il più utilizzato \n (sistemi *nix), quindi per IE array1[0] contiene "testo\r" che è sufficiente ad andare a capo.

    Fossi in te trasformerei i \r\n in \n prima di fare lo split.

    P.S. tra l'altro sui sistemi Apple, l'a capo è solo \r, immaginatevi voi che casino...
    I DON'T Double Click!

  3. #3
    Prima di tutto ti ringrazio tantissimo per la risposta

    prima di far visualizzare l'array ho provato ad inserire
    codice:
    array1[0].replace('\r\n','\n');
    array1[0].replace('\n','');
    ma il risultato è lo stesso...
    forse non è questo il modo giusto per risolvere questo problema? sapresti indicarmi tu cosa dovrei scrivere per far si che questo errore non si ripeta?


    EDIT:
    Facendo ripetute prove, sono riuscito forse ad aggirare il problema:
    faccio un controllo per vedere se l'ultimo carattere è \r se si allora lo elimino
    codice:
    <textarea id="1" cols="20" rows="5">riga1
    riga2
    riga3
    </textarea>
    <input type="button" value="invia" onclick="funzione(document.getElementById('1').value)" />
    <script>
    function funzione(t1){
    var array1 = t1.split('\n');
    if (array1[0].substring(array1[0].length-1,array1[0].length) == '\r') array1[0] = array1[0].substring(0,array1[0].length-1);
    alert(array1[0]+'fondo');
    }
    </script>
    Non penso sia una soluzione elegante e a dire il vero non sono sicuro che possa andare bene, cosa ne pensate? avete un suggerimento più appropriato?

  4. #4
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    var array1 = t1.replace(/\r?\n\r?/g,"\n").split('\n');

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  5. #5
    ah, br1 non ha messo la spiegazione, ma se ti interessa il motivo è soltanto che replace non trova TUTTE le occorrenze del pattern cercato, ma solo la prima, perché se gli passi una stringa di caratteri la funzione crea una RegExp a partire da essa, senza il secondo argomento ( http://www.javascriptkit.com/jsref/regexp.shtml il costrutture di RegExp prende 2 argomenti il primo la stringa il secondo il flag del tipo di ricerca) quindi è una ricerca alla prima occorrenza.

    quello che passa br1, invece, è già una RegExp, con il flag g finale (che indica ricerca globale).

    anche se però sono un attimo confuso dalla cosa, magari mi puoi rispondere tu br1: /\r?\n\r?/g non dovrebbe cercare tutte le occorrenze nella stringa che siano:

    \r\n\r
    \r\n
    \n
    \n\r

    o mi sbaglio? se è così non capisco cosa serva lo \r? finale. C'è la possibilità che si verifichi \n\r? Perché a me sembra di no.

    Io avrei fatto piuttosto:

    t1.replace(/\r\n/g,"\n").replace(/\r/g, "\n").split('\n');

    In modo che se ci sono dei \r\n li cambio in \n, se ci sono solo \r, li cambio in \n, ma solo dopo aver tolto i \r\n.
    I DON'T Double Click!

  6. #6
    Originariamente inviato da br1
    var array1 = t1.replace(/\r?\n\r?/g,"\n").split('\n');

    ciao
    t1.replace(/\r\n/g,"\n").replace(/\r/g, "\n").split('\n');
    funzionano tutti e due... Grazie tantissimo

    ringrazio artorius anche per le delucidazione sulla funzione replace, grazie

    per me si può anche chiudere questo post

  7. #7
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    .... l'ho scritta senza approfondire...

    var array1 = t1.split(/[\r\n|\r|\n]/);

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  8. #8
    Originariamente inviato da br1
    .... l'ho scritta senza approfondire...

    var array1 = t1.split(/[\r\n|\r|\n]/);

    ciao
    quest'ultima però mi da errore di sintassi

    posso confermare che funziona anche con questo metodo... ricapitolando avete suggerito 3 possibili soluzioni, vi ringrazio ancora

    codice:
    var array1 = t1.replace(/\r?\n\r?/g,"\n").split('\n');
    codice:
    var array1 = t1.replace(/\r\n/g,"\n").replace(/\r/g, "\n").split('\n');
    codice:
    var array1 = t1.split(/[\r\n|\r|\n]/);
    più quella meno elegante a cui mi ero arrangiato io
    codice:
    var array1 = t1.split('\n');
    if (array1[0].substring(array1[0].length-1,array1[0].length) == '\r') array1[0] = array1[0].substring(0,array1[0].length-1);

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.