RegEx

Iniciado por CH4ØZ, 11 Septiembre 2011, 07:49 AM

0 Miembros y 1 Visitante están viendo este tema.

CH4ØZ

Bueno estoy usando RegEx.Replace para filtrar todos los caracteres no numericos de un TextBox; esto ya lo logre.
Mi problema surge al querer agregar una exepcion al filtro. yo quiero que en el cuadro se puedan poner numeros (0-9) y tambien el "."(punto).
actualmente el codigo es el siguiente:
Código (vbnet) [Seleccionar]
TextBox12.Text = Regex.Replace(TextBox12.Text, [!-/:-■], "")
(■ = 254ascii)
no me juzguen si no me conocen

CH4ØZ

nadie sabe??? realmente no logro una forma de agregar una excepcion para un caracter.
no me juzguen si no me conocen

adan-2994

Mira buscando en google encontre esto
http://www.elguille.info/regexp/regExp01.aspx
http://www.recursosvisualbasic.com.ar/htm/trucos-codigofuente-visual-basic/166-expresiones-regulares.htm

Y yo cree un programa que tambien necesitaba bloquear los caracteres no numerikos pero permitir el punto

Eso lo logre en el evento KeyPress del TextBox algo asi

Código (vbnet) [Seleccionar]
  Private Sub TextBox1(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
        If Not (IsNumeric(e.KeyChar) Or e.KeyChar = "." ) Then
            My.Computer.Audio.PlaySystemSound(Media.SystemSounds.Asterisk)
            e.Handled = True
        End If
    End Sub


Fijate q si se teclea algun caracter q no sea numero o el punto reproduce un sonido del sistema (arterisko)

Talvez tanbien quieras bloquear el salto de linea (13) y el tabulador, para eso usa el siguiente codigo

Código (vbnet) [Seleccionar]
  Private Sub TextBox1(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
        If Not (IsNumeric(e.KeyChar) Or e.KeyChar = "." Or Asc(e.KeyChar) = 8 Or Asc(e.KeyChar) = 13) Then
            My.Computer.Audio.PlaySystemSound(Media.SystemSounds.Asterisk)
            e.Handled = True
        End If
    End Sub


Observa como se usa IF
...ella tiene flow, tremendo ranqueo, tu la vez pasar con su nebuleo (Blam Blam blin blin)

CH4ØZ

si, esa parte ya la hice. explico un poco mas detallado.
es un textbox en el cual va una coordenada (aproximadamente 8 digitos), por lo que seria tedioso copiar numero por numero. entonces permito que peguen el contenido desde el clipboard.
el problema es que el evento KeyPress no es llamado, por lo cual use RegEx en el evento TextChange. el codigo completo para esto es:

Código (vbnet) [Seleccionar]
Const BadChars As String = "[!-/:-■]"

Private Sub TextBox3_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox3.KeyPress
    If Not IsNumeric(e.KeyChar) And Not Char.IsControl(e.KeyChar) And e.KeyChar <> "." And Asc(e.KeyChar) <> 8 Then
        e.Handled = True
    If e.KeyChar = "." And TextBox3.Text.IndexOf(".") <> -1 Then
        e.Handled = True
End Sub

Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged
    TextBox3.Text = Regex.Replace(TextBox3.Text, BadChars, "")
End Sub


lo que aparece como "&#9632;" es el caracter ascii 254
no me juzguen si no me conocen

Valkyr

Sí es una expresión regular ¿por qué no usas esto?:

[^\d\.]+

Con esa expresión reconoces todo lo que no sean números ni punto.

Saludos.

CH4ØZ

wow gracias. eso funciono perfecto. no se me ocurrio xq todavía no termino de comprender RegEx.
no me juzguen si no me conocen