Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2003
    Messaggi
    376

    ricerca carattere e blocco se trovato

    Salve a tutti ho cercato in giro nel web e anche sul forum ma non sono riuscito a trovare niente oppure solo codice parziale o non funzionante. Quello che vorrei realizzare è abbastanza semplice, in pratica in un form ho un campo di input di tipo file e vorrei controllare che i nomi dei file che si possono inserire non abbiamo i caratteri speciali, unici ammessi sono il PUNTO, il segno - e il segno _, tutti gli altri devono essere banditi.
    Vi posto il codice che ho realizzato ma che non funziona poichè sia che ci sia un carattere speciale o meno dice sempre OK.

    codice:
    <head>
    <script type="text/javascript">
    <!--
    function valida() {
    var re = /^[a-z A-Z 0-9 \. - _]+$/;
    var str=document.Modulo.campo_foto1.value;
    if(!re.test(str)){
    	alert('CARATTERI OK');
    	return true;			
        }		
        else {
      	alert("CARATTERI SPECIALI NON AMMESSI. \n RIMUOVILI E RIPROVA.");		
    	return false;		
       }
    }
    //-->
    </script>	
    </head>
    <form method="post" name="Modulo">
    <input name="campo_foto1" type="file" required class="label"> 
    <input type="button" value="Invia" title="IMPORTA FOTO" onclick="valida();"> 
    </form>
    Chi Crede in Me non Perirà MAI

  2. #2
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,783
    immagino quale sia lo scopo dell'operazione...
    posso suggerire di rinominare i file durante il salvataggio?
    così hai tu il controllo di tutto

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2003
    Messaggi
    376
    Preferirei percorrere la strada che ho scritto, senza offesa.
    Chi Crede in Me non Perirà MAI

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Ciao, ci sono 4 o 5 cose che non vanno bene nella "strada che hai scritto".

    1 - Intanto fai attenzione a come hai scritto il pattern:
    codice:
    /^[a-z A-Z 0-9 \. - _]+$/
    c'è sicuramente qualche spazio di troppo o comunque inutile. Tieni sempre bene a mente che in una espressione regolare ogni singolo carattere ha una specifica rilevanza, per cui non puoi permetterti di inserire spazi random solo per rendere più leggibile il codice.

    Inoltre non serve fare l'escape del punto dentro una classe di caratteri (il blocco tra parentesi quadre)

    Se nella stringa non sono permessi gli spazi, il pattern va scritto così:
    codice:
    /^[a-zA-Z0-9_.-]+$/
    Se invece sono permessi anche gli spazi, puoi scriverlo così:
    codice:
    /^[a-zA-Z0-9_. -]+$/
    Inutile dire che questo, con tutti gli altri controlli del caso, dovrai farli anche lato server se tali dati vanno processati appunto lato server (come ha accennato Vincent.Zeno), dal momento che qualche malintenzionato può facilmente aggirare qualsiasi controllo lato client.

    2 - Cosa pensi che significhi il punto esclamativo in questa condizione?
    codice:
    if(!re.test(str)){    alert('CARATTERI OK');
    Si tratta di una negazione per cui, traducendo in umanese, significa "Se la stringa NON contiene solo i caratteri consentiti, allora è OK".
    Puoi capire da te stesso che quella negazione è di troppo, anzi fa esattamente il contrario di ciò che ti serve.

    Dovresti toglierla in questo modo:
    codice:
    if(re.test(str)){
        alert('CARATTERI OK');
    3 - La proprietà value di un campo di tipo file rappresenta il percorso del file selezionato, non solo il nome del file.
    Quindi quel value ti restituisce una cosa del genere:
    codice:
    "C:\fakepath\nome_del_file.txt"
    In realtà il suffisso, prima del nome del file, si tratta di un percorso fasullo per ragioni di sicurezza, ad ogni modo contiene sicuramente dei caratteri che non vuoi consentire.

    Quindi, se devi controllare solo il nome del file (compresa l'estensione), partendo dal value dell'elemento input dovrai considerare in qualche modo solo la parte dopo l'ultimo slash, oppure (metodo che consiglio) usare la proprietà name dell'oggetto file contenuto nel FileList restituito da quell'input (come proprietà files).

    Inoltre è necessario controllare la lunghezza del FileList per evitare possibili errori qualora non venga selezionato alcun file.

    Più facile farlo che spiegarlo; la tua funzione potrebbe essere impostata in questo modo:
    codice:
    function valida() {
      if (document.Modulo.campo_foto1.files.length === 0) return false;
      const re = /^[a-zA-Z0-9_. -]+$/;
      const str = document.Modulo.campo_foto1.files[0].name;
      if (re.test(str)) {
        alert('CARATTERI OK');
        return true;
      } else {
        alert("CARATTERI SPECIALI NON AMMESSI. \n RIMUOVILI E RIPROVA.");
        return false;
      }
    }
    4 - Suppongo tu voglia poi eseguire il submit del form, ma penso ci sia qualche problema con quel button che hai impostato in quel modo. Per il momento dovrebbe apparire solo l'alert ma non ho capito se lo script che hai impostato è incompleto e vai quindi ad eseguire il submit in qualche altro modo.
    Presumo ci sia da chiarire meglio anche questo aspetto. Nel caso ti consiglio di fare qualche ricerca del tipo javascript confirm form submit. e cercare di riportare scrupolosamente qualcuna tra le soluzioni trovate.

    Fai sapere.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2003
    Messaggi
    376
    Grazie del tuo prezioso anzi preziosissimo aiuto. Sei un grande
    Hai immaginato bene, infatti la form deve passare 2 campi nascosti, quindi al posto di
    alert
    ('CARATTERI OK'); dovrei inserire qualcosa come:
    document.Modulo.action = "carica_FOTO1.asp?hiddenId1=";
    document.Modulo.submit();
    avendo specificato prima che var Id = document.Modulo.hiddenId1.value
    Ma non saprei come passare la variabile e inoltre nella pagina che riceve i dati devo poter mantenere le proprietà dell'oggetto file, tipo:
    oUpload.Files("Width") o oUpload.Files("Height") o oUpload.GetFileName e non so se con il discorso javascript queste info riesco a mantenerle. Grazie
    Chi Crede in Me non Perirà MAI

  6. #6
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Per fare l'upload di "file" è necessario impostare il form con enctype="multipart/form-data" oltre che method="post". In questo modo i file saranno inviati come dati di tipo binario per poterli ricevere opportunamente lato server. A quel punto suppongo che si possano recuperare lato server anche le relative proprietà del file.

    Gli altri dati saranno comunque inviati via POST per cui non hai bisogno di appenderli all'URL come query string; lato server li puoi recuperare normalmente come dati ricevuti in POST.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2003
    Messaggi
    376
    Quindi ricapitalondo tu diresti di fare così:

    codice:
    <script type="text/javascript">
    <!--
    function valida() {
    if (document.Modulo.campo_foto1.files.length === 0) return false;    
    const re = /^[a-zA-Z0-9_. -]+$/;
    const str = document.Modulo.campo_foto1.files[0].name;
    if (re.test(str)) {        
        document.Modulo.action = "carica_FOTO1.asp"; 
        document.Modulo.submit();
      } else {
          alert("CARATTERI SPECIALI NON AMMESSI. \n RIMUOVILI E RIPROVA.");        
        return false;        
      }
    }
    -->    
    </script>
    <form method="post" name="Modulo" enctype="multipart/form-data">
            <table width="100%" border="0" cellspacing="0" cellpadding="0">
              <tr>
                <td>
                <input name="campo_foto1" type="file" required class="label">                                
                <input name="hiddenId1" type="hidden" id="hiddenId1" value="<%=request.QueryString("Col2")%>"> 
                <input name="hiddenData1" type="hidden" id="hiddenData1" value="<%=Dat%>"> 
                <input type="button" value="Invia" class="bottoniscansiona" title="IMPORTA FOTO" onclick="valida();">         
                </td>
                 </tr>         
        </table>
    </form>
    Infatti funziona. Sei un GRANDEEEEEEEEEE
    Grazie
    Ultima modifica di devil946; 07-12-2022 a 09:48
    Chi Crede in Me non Perirà MAI

  8. #8
    Utente di HTML.it L'avatar di vic53
    Registrato dal
    Oct 2010
    residenza
    Fonte Nuova (Roma)
    Messaggi
    592
    Se invece fai il filtro sull'input digitato nel campo file
    tramite una funzionejavascript tipo questa?
    codice:
    function CharValidi(myfield, e) {
      var key;
      var keychar;
      if (window.event)
        key = window.event.keyCode;
      else if (e)
        key = e.which;
      else
        return true;
      keychar = String.fromCharCode(key);
      // control keys
      if ((key==null) || (key==0) || (key==8) || (key==9) || (key==13) || (key==27) )
        return true;
      else if ((("abcdefghilmnopqrstuvzwxyjkABCDEFGHILMNOPQRSTUVZWXYJKJ0123456789-_").indexOf(keychar) > -1))
        return true;
      else
        return false;
    } 
    ....
    ...
    e nel campo la chiami con <input type="file" ... onKeyPress="return CharValidi(this, event)"...
    potrebbe semplificare molto?
    ...
    Ultima modifica di vic53; 09-12-2022 a 20:01
    Vic53

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.