Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    Permettere solo una selezione di caratteri un una input text

    ciao!

    mi hanno chiesto di impostare che una input text possa accettare solo questi caratteri:
    • tutte le lettere maiuscole
    • tutte le lettere minuscole
    • lettere accentate
    • spazio
    • apostrofo


    e quindi escludere:
    • tutti i numeri
    • tutti gli altri caratteri speciali


    secondo voi come posso fare??

    l'unica soluzione che mi venuta in mente al momento controllare il carattere premuto e confrontarlo con il char code ascii.
    ma non so se la soluzione migliore.

  2. #2

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,046
    Le implementazioni possibili sono abbastanza semplici da realizzare: prova a prendere spunto da questi esempi.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    grazie a entrambi!

    me li spulcio subito e vi faccio sapere!

  5. #5
    Utente di HTML.it L'avatar di ninja72
    Registrato dal
    May 2020
    residenza
    -
    Messaggi
    252
    Non ho avuto modo di testare bene la cosa, facci sapere ciao.

    codice:
    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="UTF-8" />
            <meta http-equiv="X-UA-Compatible" content="IE=edge" />
            <meta name="viewport" content="width=device-width, initial-scale=1.0" />
            <title>Document</title>
        </head>
        <body>
            <input type="text" id="testo" />
            <div id="result"></div>
    
            <script>
                const mytext = document.getElementById("testo")
                const result = document.getElementById("result")
    
                mytext.addEventListener("input", (e) => {
                    const myRexp = new RegExp(/^[a-z\'\s\]{3,}$/, "gi")
                    if (myRexp.test(e.target.value)) {
                        result.textContent = "valido"
                    } else {
                        result.textContent =
                            "non valido, (regexp con minimo 3 caratteri)"
                    }
                })
            </script>
        </body>
    </html>

  6. #6
    ciao!

    al momento mi sta funzionando solo questa soluzione:
    codice:
    <input type="text" value="" onkeydown="return checkChar(event);">
    
    <script>
        function checkChar(evt) {
            const permessi = Array(65, 32, 39, 127, 8);
            const charCode = (evt.which) ? evt.which : event.keyCode;
            if (!permessi.includes(charCode)) {
                return false;
            }
            return true;
        }
    </script>
    solo che:
    • mi dice che event deprecato
    • ho dovuto mettere anche i "decimal" per il backspace e canc
    • ovviamente li devo mettere tutti uno per uno nell'array
    • i caratteri accentati non mi funzionano (,, dovrei averli messi corretti nell'array)
    • mi prende sia A che a, anche se hanno valori diversi

  7. #7
    ho testato il char code dei caratteri e li ho messi nell'array.

    questo sembrerebbe funzionare:
    codice:
    <input type="text" value="" onkeydown="return checkChar(event);">
    
    <script>
        function checkChar(evt) {
            const permessi = Array(
                8, 32, 39, 46, 59, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
                78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 222
            );
            const charCode = (evt.which) ? evt.which : evt.keyCode;
            console.log(charCode);
            if (!permessi.includes(charCode)) {
                return false;
            }
            return true;
        }
    </script>

  8. #8
    alla fine ho fatto cos:
    codice:
    checkChar(evt) {
        const permessi = Array();
        const alphabet = 'abcdefghijklmnopqrstuvwxyz';
        for (let i = 0; i < alphabet.length; i++) {
            permessi.push(alphabet.charAt(i));
            permessi.push(alphabet.charAt(i).toUpperCase());
        }
        permessi.push(' ', '', '', '', '', '', 'Backspace', 'ArrowRight', 'ArrowLeft', 'Delete', '\'');
        if (!permessi.includes(evt.key)) {
            return false;
        }
        return true;
    }
    ho usato evt.key che non deprecato.
    ed ho costruito l'array permessi in quella maniera.
    mi sembra un p pi funzionale.

  9. #9
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,216
    Quote Originariamente inviata da fermat Visualizza il messaggio
    alla fine ho fatto cos:
    [...]
    ho usato evt.key che non deprecato.
    ed ho costruito l'array permessi in quella maniera.
    mi sembra un p pi funzionale.
    Ciao, il tuo sistema non impedisce per di eseguire dei copia-incolla in cui il testo presenta dei caratteri non consentiti.

    Ad esempio se copio questo testo ~.Ʈ.ŷ@$$.|.ŋŧ.~ e lo incollo nel tuo campo input, sar perfettamente accettato nonostante tutti i caratteri risultino vietati dal tuo sistema.

    Ora, questo magari pu essere un esempio eccessivo ma, non avendo tu chiarito il contesto, posso pensare che si tratti di un qualche campo "Nome Cognome", per cui non da escludere il copia-incolla (magari copiando direttamente da altre fonti) in cui magari il dato presenta caratteri non consentiti.

    Esempi:
    Thomas Mller
    M. Lucia Curri
    (Pippo Baudo)
    "Pinco Pallo"
    Mario - Rossi

    A questo punto facile che qualche carattere sfugga al controllo.

    Non chiaro poi se per le lettere accentate vuoi che siano ammesse solo quelle minuscole () oppure anche le maiuscole ().

    Se, ad esempio, facessi un copia incolla di MARIO CAL, dove tutte le lettere sono maiuscole compresa l'ultima che una "o" accentata, come dovrebbe comportarsi il sistema?

    Nel tuo ultimo esempio noto che nell'array permessi hai anche omesso la "" (i accentata).
    E' stata una tua dimenticanza o c' qualche motivo valido?


    Ad ogni modo, personalmente un sistema pi funzionale lo vedrei impostando un evento input - che attualmente copre tutti i vari tipi di azione per l'immissione del dato nel campo; o tutt'al pi un evento change, che viene eseguito una volta usciti dal campo - e usando un replace con una espressione regolare che rimuova i caratteri non consentiti, cio quelli non compresi in una classe di caratteri specifici.

    Qui un semplice esempio:
    codice HTML:
    <!DOCTYPE HTML>
    <html lang="it">
       <head>
          <title>Esempio</title>
       </head>
       <body>
          <input id="inpFoo" value="">
          <script>
             const inp = document.getElementById('inpFoo');
             inp.addEventListener('input', controllaECorreggi)
             
             function controllaECorreggi(){
                this.value = this.value.replace(/[^a-z ']/gi, '');
             }
          </script>
      </body>
    </html>
    Sono rimossi tutti i caratteri diversi da quelli specificati dentro la classe [^...]
    Il flag "i" (case insensitive) significa che non c' distinzione tra minuscole e maiuscole, per cui sono ammessi i caratteri "a" e "A", cos come "" e "".

    Se vuoi distinzione tra minuscole e maiuscole, ad esempio per amettere "" ma non "", usa invece Queso:
    codice:
    this.value = this.value.replace(/[^a-zA-Z ']/g, '');
    .
    Inoltre, se si tratta di un regolare form web, inutile dirti che lo stesso controllo andr ovviamente eseguito anche lato server.

    Se hai bisogno di ulteriori chiarimenti chiedi pure.
    Fai sapere se pu andare.
    Buon proseguimento
    Prima di postare considera che tra i link utili puoi trovare il 75% delle risposte alle tue domande; il 20% tra i post del forum; il 15% sul web. Ti resta... humm sp
    Le cattive domande sono quelle che non meritano risposta, le buone domande sono quelle che non hanno risposta
    L'Itailano non e nu'opnioine. E' improntate uslaro correattemtne sul froum. Garize!

    "Mi son documentato"

  10. #10
    ciao!

    per quanto riguarda il copia e incolla hai ragione.
    ma in questo caso si tratta di uno schermo che verr messo in modalit kiosk.
    quindi non possono copiare e incollare quei caratteri.
    a meno che non li mettano in un'altra input text, per siamo ai limiti della follia .

    la una mia dimenticanza, grazie di avermelo segnalato!
    cmq provo al pi presto la tua soluzione e ti dico!

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