Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di amamax
    Registrato dal
    Feb 2001
    Messaggi
    562

    match() problema con caratteri come ? ( ) [ ] ecc...

    Sto cercando di fare un match di una stringa che potrebbe contenere caratteri come questi:

    ~!@#$%^*()_+=-`{}[]|\/:;',.?

    Il problema è che usando il metodo match() quando gli passo alcuni di questi caratteri è come se il javascript andasse in blocco. In particolare parlo di caratteri come ? ( ) [ ]

    Io faccio così:

    var strCharAmmessi="~!@#$%^*()_+=-`{}[]|\/:;',.?ABCDEFGHILMNOPQRSTUVZJKWYabcdefghilmnopqrstu vzjkwy0123456789";

    //controlla se i caratteri contenuti nella nuova password sono tra quelli ammessi
    function ctrl_caratteri(pswCtrl){
    //passa per ogni carattere della password e lo confronta con i caratteri ammessi
    for(i=0;i<pswCtrl.length;i++){
    //fa il confronto carattere per carattere
    var risultato=strCharAmmessi.match(pswCtrl[i]);
    alert(risultato);
    //se uno dei caratteri della password risulta non presente nella stringa di controllo
    //allora ritorna un false
    if(risultato==null){
    return false;
    }
    }
    //si manifesta nel caso tutti i caratteri della password sono presenti nella stringa di controllo
    return true;
    }

    Funziona tutto bene se i caratteri sono altri, tipo ! ^ # @ mentre con quelli che ho citato sopra non mi restituisce ne null ne niente. E' come se proprio quei caratteri non li digerisce.

    Qualcuno ha un'idea?

  2. #2
    Utente di HTML.it L'avatar di amamax
    Registrato dal
    Feb 2001
    Messaggi
    562
    Nessuno ha qualche idea?

  3. #3

  4. #4
    Utente di HTML.it L'avatar di amamax
    Registrato dal
    Feb 2001
    Messaggi
    562
    Originariamente inviato da Vindav
    perche non usi indexOf?

    http://www.w3schools.com/jsref/jsref_indexof.asp
    Ciao. A quanto pare non è il comportamento che mi serve. indexOf() restituisce il punto in cui si trova la parola indicata. Invece io devo verificare se all'interno di quella stringa di carattere c'è un carattere in particolare.

    Anche se mi pare forse d'aver capito che tu mi vuoi dire di usarlo "come" il match(), in modo tale che se mi restituisce -1 vuol dire che non c'è nulla dentro, vero? Dici che funziona anche con il caso dei caratteri che ti dicevo? Ora provo, spero di si.

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    Originariamente inviato da amamax
    Anche se mi pare forse d'aver capito che tu mi vuoi dire di usarlo "come" il match(), in modo tale che se mi restituisce -1 vuol dire che non c'è nulla dentro, vero? Dici che funziona anche con il caso dei caratteri che ti dicevo? Ora provo, spero di si.
    Esatto, hai capito perfettamente, in teoria dovrebbe funzionare con tutti i caratteri.

  6. #6
    Utente di HTML.it L'avatar di amamax
    Registrato dal
    Feb 2001
    Messaggi
    562
    Originariamente inviato da Vindav
    Esatto, hai capito perfettamente, in teoria dovrebbe funzionare con tutti i caratteri.
    Purtroppo non va... ragazzi mi dovete aiutare...io continuo a fare ricerche in giro, ma mi dovete aiutare. Ho usato anche indexOf() usando -1 invece che null come risultato da confrontare.

    Però fa lo stesso effetto che ho spiegato all'inizio del topic.
    Alcuni segni non me li passa, non li vede nel codice, ad esempio ? ( ) [ ] che sono gli unici che ho provato che mi danno questo problema, invece altri come " ! | ^ mi funzionano.

    Ragazzi avete una soluzione? Grazie mille in anticipo. ma è un problema di charset o quella roba lì? Non ne avete idea?

    La mia paura più grande è che se l'utente mette qualche carattere strano al di là di quelli citati, il codice continua a funzionare. Perchè io ho anche pensato di convertire magari il carattere in qualcosa d'altro..ma non vorrei che poi con caratteri appunto particolari, non avendoli individuati, poi rischio che non mi funziona lo stesso. Non c'è qualche soluzione?

    Grazie mille

  7. #7
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Anteponi a ciascun carattere "strano" un carattere di escape...

    var strCharAmmessi="\~\!\@\#\$\%\^\*\(\)\_\+\=\-\`\{\}\[\]\|\\\/\:\;\'\,\.\?"

    meglio abbondare...
    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
    Utente di HTML.it L'avatar di amamax
    Registrato dal
    Feb 2001
    Messaggi
    562
    Originariamente inviato da br1
    Anteponi a ciascun carattere "strano" un carattere di escape...

    var strCharAmmessi="\~\!\@\#\$\%\^\*\(\)\_\+\=\-\`\{\}\[\]\|\\\/\:\;\'\,\.\?"

    meglio abbondare...
    Ciao, domani ci provo. Ma mi ricordo che l'ho messo in modo specifico appunto ai caratteri che mi davano problemi e cmq non andava. Spero che questa tua soluzione funzioni, ma non so perchè non mi sento così sollevato.

  9. #9
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Per queste cose si usa regExp.test()&hellip;:

    codice:
    var rDenied = /[^~\!@\\#\$%\^\*\(\)\+\=\-`\{\}\[\]\|\/\:;'\,\.\?\w]/;
    
    var tuaStringa = prompt("Inserisci una stringa su cui effettuare il test");
    
    var bAbort = rDenied.test(tuaStringa);
    
    alert(bAbort ? "Stringa non valida!" : "Tutto ok");
    Tutto ciò che fai con jQuery puoi farlo meglio e con la metà del codice in puro JavaScript.

  10. #10
    Utente di HTML.it L'avatar di amamax
    Registrato dal
    Feb 2001
    Messaggi
    562
    Grazie carlomarx....appena sono in ufficio ci provo. Spero che vada

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.