Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    43

    Espressione Regolare: match delle parentesi quadre

    Ho creato un'espressione regolare in Jscript che escluda qualsiasi carattere diverso da quelli in essa contenuti. Fa così:

    codice:
    var controllalogin = new RegExp("[^0-9a-zA-Zàáâèéêìíîòóôùúûñç_~!\|@\-§^$]");
    var risultatocontrollo = controllalogin.exec(document.form1.elements[0].value);
    
    if (!risultatocontrollo) { return true }
    else{
      alert ("Hai utilizzato dei caratteri non permessi per il login. Correggi e riprova.");
      return false;
      }
    Funziona bene, esclude tutto... tranne la presenza di parentesi quadre, me le fa passare come se andassero bene.
    Cosa può essere?

    Grazie in anticipo

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Non capisco completamente la tua regexp.

    Perche` inizi la quadra con ^ ? vuoi escludere tutti quei caratteri?
    E perche` usi il metodo exec, che potrebbe dare problemi in qualche browser?
    Perche` ci sono caratteri senza backslash davanti (^ $)?
    Perche` permetti caratteri oltre quelli della quadra? (manca inizio e fine stringa)

    Io farei diversamente:
    codice:
    var controllalogin = new RegExp("^[0-9a-zA-Zàáâèéêìíîòóôùúûñç_~!\|@\-§\^\$]+$");
    if(controllalogin.test(document.form1.elements[0].value) {
      return true }
    else{
      alert ("Hai utilizzato dei caratteri non permessi per il login. Correggi e riprova.");
      return false;
    }
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    43
    La risposta ai tuoi problemi di comprensione è che... non sono molto bravo a scrivere in Javascript

    Comunque... sì, io voglio permettere all'utente di inviare il form SOLO SE il campo login contiene SOLO caratteri appartenenti a quelle classi contenute nell'espressione regolare.

    Ho provato a utilizzare il tuo codice (grazie intanto per le correzioni formali tipo le escapature che avevo dimenticato!), ma è tutto uguale, continua a bloccarmi caratteri che deve giustamente bloccare, come gli ", le parentesi tonde ecc ecc, ma le parentesi quadre me le fa passare come se fossero permesse!

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    E se fosse di fare viceversa? Scrivere nella RegExp i caratteri vietati?

    var controllalogin = new RegExp("^[^\{\[\(\)\]\}\\'\"]+$");
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    43
    Originariamente inviato da Mich_
    E se fosse di fare viceversa? Scrivere nella RegExp i caratteri vietati?

    var controllalogin = new RegExp("^[^\{\[\(\)\]\}\\'\"]+$");
    No no, assolutamente, finirebbe che mi arriva sempre l'utente che mette un carattere che ci siamo dimenticati, magari solo perchè non c'è sulla tastiera italiana
    E' assurdo comunque che mi faccia passare le quadre, sono chiaramente non incluse nelle classi che indico nella mia espressione regolare

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Hai ragione: e` assurdo.

    Magari e` un problema di sintassi: vedi se per caso ti sei dimenticato qualche (altra) backslash
    (in linea di massima mettere una backlash davanti ad un carattere non alfabetico non crea problemi)
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  7. #7
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    se il pattern della regular expression lo scrivi come stringa devi tener presente i caratteri speciali di javascript (come la backslash)
    codice:
    var controllalogin = new RegExp("[^0-9a-zA-Zàáâèéêìíîòóôùúûñç_~!\\|@\\-§\\^\\$]");
    così accetta tutti i numeri tutte le lettere, le lettere minuscole accentate àáâèéêìíîòóôùúûñ e i caratteri ç, _, ~, !, |, @, -, §, ^, $
    parentesi di qualunque tipo non vengono accettate (anche lo spazio non è accettato)

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    43
    Originariamente inviato da willybit
    se il pattern della regular expression lo scrivi come stringa devi tener presente i caratteri speciali di javascript (come la backslash)
    codice:
    var controllalogin = new RegExp("[^0-9a-zA-Zàáâèéêìíîòóôùúûñç_~!\\|@\\-§\\^\\$]");
    così accetta tutti i numeri tutte le lettere, le lettere minuscole accentate àáâèéêìíîòóôùúûñ e i caratteri ç, _, ~, !, |, @, -, §, ^, $
    parentesi di qualunque tipo non vengono accettate (anche lo spazio non è accettato)
    Perfetto, così funziona! Grazie 1000!!!
    Non ho capito l'errore però, per escapare i caratteri devo usare questo DOPPIO backslash?

  9. #9
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    Originariamente inviato da flip79
    per escapare i caratteri devo usare questo DOPPIO backslash?
    Esatto. Una backslash per escapare la backslash che escapa il carattere della regular expression

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Originariamente inviato da willybit
    Esatto. Una backslash per escapare la backslash che escapa il carattere della regular expression
    Non direi che la motivazione e` corretta (almeno per come la percepisco io).
    Si tratta di vedere quante volte la stringa viene manipolata: ad ogni manipolazione una backslash viene mangiata (viene usata per la manipolazione stessa).
    Quindi se quella stringa la scrivi in un programma lato server, il programma lato server trasforma il (ad esempio) \- in -, che quindi si trova senza \ al prossimo passaggio.
    Dato che la \ escapa anche se stessa, con un \\-, al prossimo passaggio ti ritrovi con \- , che e` quello che volevi.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

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.