Gambas-it

Archivi (sola lettura) => Domande tecniche (Gambas 2) => Topic aperto da: vaillant86 - 06 Settembre 2011, 19:03:07

Titolo: [RISOLTO] Impedire caratteri speciali nella textbox
Inserito da: vaillant86 - 06 Settembre 2011, 19:03:07
Ciao a tutto il forum, non mi collegavo da un pò di tempo ;D

Ho un problema che non sono riuscito a risolvere con google e documentazione varia. In pratica in un programma ho due textbox in cui l'utente inserisce due stringhe (nome e cognome). Vorrei evitare di far inserire i caratteri speciali come @ # ! { ecc.

Spulciando qua e la ho visto che si dovrebbe usare il componente gb.pcre e regexp, ma non ho capito la sintassi da usare. Cioè, una stringa del genere
Codice: [Seleziona]
(?i)\b[a-z0-9._%\-]+@[a-z0-9._%\-]+\.[A-Z]{2,4}\b
mi assicura un corretto indirizzo email (mi riferisco alla documentazione ufficiale dove è riportato l'esempio) ma non so come adattarlo alla mia situazione.

Attendo fiducioso :)
Titolo: Re: Impedire caratteri speciali nella textbox
Inserito da: Ceskho - 06 Settembre 2011, 19:45:33
Potresti creare nell'evento change un'algoritmo che ti elimina quei caratteri. Ora vado a memoria che non ho gambas sotto mano

Codice: gambas [Seleziona]
Sub TextBox1_Change()

    TextBox1.Text = Replace(TextBox1.Text , '@' , '')

End Sub

Questo ad esempio elimina la chiocciola....

Oppure potresti intercettare l'evento KeyPress ed impedire che certi caratteri vengano passati alla textbox
Titolo: Re: Impedire caratteri speciali nella textbox
Inserito da: vaillant86 - 06 Settembre 2011, 21:26:50
Grazie, quindi posso fare a meno di gb.pcre. Un'altra cosa, ho visto nella documentazione di Replace che la sintassi è

Replace(textbox, "stringadasostituire", "stringasostitutiva")

Siccome i caratteri che vorrei evitare sono 10, devo fare 10 righe diverse o posso concatenare le varie "stringadasostituire"?

Attualmente ho fatto così
Codice: gambas [Seleziona]

  TextBox_Name.Text = Replace(TextBox_Name.Text, "@", "")
  TextBox_Name.Text = Replace(TextBox_Name.Text, "#", "")
  TextBox_Name.Text = Replace(TextBox_Name.Text, "!", "")
  TextBox_Name.Text = Replace(TextBox_Name.Text, "~", "")
  TextBox_Name.Text = Replace(TextBox_Name.Text, "(", "")
  TextBox_Name.Text = Replace(TextBox_Name.Text, ")", "")
  TextBox_Name.Text = Replace(TextBox_Name.Text, "{", "")
  TextBox_Name.Text = Replace(TextBox_Name.Text, "}", "")
  TextBox_Name.Text = Replace(TextBox_Name.Text, "[", "")
  TextBox_Name.Text = Replace(TextBox_Name.Text, "]", "")

ma immagino ci sia un modo più pulito
Titolo: Re: Impedire caratteri speciali nella textbox
Inserito da: vuott - 07 Settembre 2011, 00:30:25
ma immagino ci sia un modo più pulito

...forse con qualche ciclo FOR ed utilizzando i codici chr(nn),  dato che molti di quei caratteri che non ti servono sono uniti in 3 - 4 gruppi, infatti - per esempio:

58   :
59   ;
60   <
61   =
62   >
63   ?
64   @
Titolo: Re: Impedire caratteri speciali nella textbox
Inserito da: Ceskho - 07 Settembre 2011, 09:44:47
Forse è meglio se usi l'evento keyPress intercettando i valori del tasto premuto. Credevo fossero di meno i caratteri. Prova con:

Codice: gambas [Seleziona]
PUBLIC SUB TextBox_Name_KeyPress()

  SELECT Key.text
    CASE "@","#","!","~","(",")","{","}","[","]",
      STOP EVENT
  END SELECT
 
END
Titolo: Re: Impedire caratteri speciali nella textbox
Inserito da: vaillant86 - 08 Settembre 2011, 19:18:37
Perfetto, così funziona. Mille grazie ;)
Titolo: Re: Impedire caratteri speciali nella textbox
Inserito da: Ceskho - 09 Settembre 2011, 09:36:25
Perfetto, così funziona. Mille grazie ;)

Mille euro  :rotfl:
Titolo: Re: Impedire caratteri speciali nella textbox
Inserito da: vuott - 19 Novembre 2013, 23:25:05
Forse è meglio se usi l'evento keyPress intercettando i valori del tasto premuto. Credevo fossero di meno i caratteri. Prova con:

Codice: gambas [Seleziona]
PUBLIC SUB TextBox_Name_KeyPress()

  SELECT Key.text
    CASE "@","#","!","~","(",")","{","}","[","]",
      STOP EVENT
  END SELECT
  
END


Si può adottare anche una soluzione analoga, ma con altre fuzioni:
Codice: gambas [Seleziona]

Public Sub TextBox_Name_KeyPress()

  If (IsLetter(Key.text) = False) And (IsDigit(Key.text) = False) Then Stop Event

End