Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2008
    residenza
    Alcatraz
    Messaggi
    20

    JS ed espressioni regolari.

    Ciao a tutti!

    Sto da poco "giocando" con l'uso delle espressioni regolare - in questo caso in javascript - e sono tutt'altro che esperto.

    Quello che vorrei fare è verificare se un particolare testo rispetta una precisa regola sintattica.

    utilizzo questa RegEx:
    var x = /(((\w)+;(\w)+){1}(\n?)$)+/g;

    il testo deve avere una o più righe con questa sintessi: Valore;Etichetta
    Ad esempio:

    1;Rosso
    2;Bianco
    3;Nero

    (il valore può essere alfanumerico)
    Quindi applico la verifica in questo modo:

    alert("test: " + x.test(testo))

    Ma non mi torna.
    *Mi rende correttamente TRUE se passo un testo come quello sopra.
    *Mi rende correttamente FALSE se passo un testo totalmente sbagliato, come:

    testo sbagliato

    oppure
    1.Rosso
    2.Bianco
    3.Nero

    *MA mi torna TRUE invece di FALSE quando almeno una delle righe è corretta, come:

    A;Rosso
    B-Bianco
    C;Nero

    Vorrei un FALSE perchè la seconda riga non rispetta il formalismo che mi sono imposto, ma ho un TRUE poichè almeno una riga lo rispetta (vero?).

    Dove sbaglio con la mia RegEx?

    il testo è "trimmato", quindi non ci sono spazi o ritorni a capo superflui prima e dopo il testo.

    Grazie!

  2. #2
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    prova questa

    var tuaRe = /^((\w\d)+;(\w\d)+(\s*))+$/gim;
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2008
    residenza
    Alcatraz
    Messaggi
    20
    Originariamente inviato da fcaldera
    prova questa

    var tuaRe = /^((\w\d)+;(\w\d)+(\s*))+$/gim;
    Grazie davvero per la celere risposta!!!

    Ho provato ad iserire la regola, come mi dicevi.. ma ora mi ritorna sempre FALSE, anche quando il testo è ben formato

    Ho provato anche la variante

    var tuaRe = /^((\w)+;(\w)+(\s*))+$/gim;

    Ma si comporta esattamente come la mia originale.

    mumble mumble.....

  4. #4
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    il problema è che il ritorno a capo è fatto di 2 caratteri (ritorno a capo e nuova riga)
    e nell'ultimo elemeno della tua stringa non c'è il ritorno a capo
    io farei una cosa del genere
    codice:
    /^(\w+;\w+(\r\n|$))+$/

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2008
    residenza
    Alcatraz
    Messaggi
    20
    Ok... faccio passare il week-end ( ) e poi provo la tua soluzione.
    Sicuramente vi farò sapere se ho risolto.

    Grazie ancora!!!

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2008
    residenza
    Alcatraz
    Messaggi
    20
    Originariamente inviato da willybit
    il problema è che il ritorno a capo è fatto di 2 caratteri (ritorno a capo e nuova riga)
    e nell'ultimo elemeno della tua stringa non c'è il ritorno a capo
    io farei una cosa del genere
    codice:
    /^(\w+;\w+(\r\n|$))+$/
    Eureka ci sono riuscito.. pare

    Ho provato però una variante di quello che mi dicevi tu, che mi rendeva ancora sempre false.
    Il codice che pare funzionare è questo:

    codice:
    var x = /^(\w+;\w+(\r\n|\n|$))+$/

  7. #7
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    Originariamente inviato da mymark
    Ma per quale motivo in chiusura hai messo il dollaro in
    codice:
    (\r\n|$)
    ?
    Perché l'ultima occorrenza che cerchi potrebbe finire senza ritorno a capo

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2008
    residenza
    Alcatraz
    Messaggi
    20
    Originariamente inviato da willybit
    Perché l'ultima occorrenza che cerchi potrebbe finire senza ritorno a capo
    Si si.. scusa...

    ..ho modificato il messaggio originale quasi subito perchè ci ero arrivato ( ).. ma non sono stato talmente celere da evitare la tua risposta.

    Cmq grazie per la dritta.. sorpreso dalla potenza delle espressioni regolarei ^__^

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 © 2024 vBulletin Solutions, Inc. All rights reserved.