Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: CH4ØZ en 11 Septiembre 2011, 07:49 am



Título: RegEx
Publicado por: CH4ØZ en 11 Septiembre 2011, 07:49 am
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
  1. TextBox12.Text = Regex.Replace(TextBox12.Text, [!-/:-■], "")
(■ = 254ascii)


Título: Re: RegEx
Publicado por: CH4ØZ en 14 Septiembre 2011, 02:09 am
nadie sabe??? realmente no logro una forma de agregar una excepcion para un caracter.


Título: Re: RegEx
Publicado por: adan-2994 en 15 Septiembre 2011, 02:08 am
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
  1.  Private Sub TextBox1(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
  2.        If Not (IsNumeric(e.KeyChar) Or e.KeyChar = "." ) Then
  3.            My.Computer.Audio.PlaySystemSound(Media.SystemSounds.Asterisk)
  4.            e.Handled = True
  5.        End If
  6.    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
  1.  Private Sub TextBox1(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
  2.        If Not (IsNumeric(e.KeyChar) Or e.KeyChar = "." Or Asc(e.KeyChar) = 8 Or Asc(e.KeyChar) = 13) Then
  3.            My.Computer.Audio.PlaySystemSound(Media.SystemSounds.Asterisk)
  4.            e.Handled = True
  5.        End If
  6.    End Sub

Observa como se usa IF


Título: Re: RegEx
Publicado por: CH4ØZ en 15 Septiembre 2011, 02:41 am
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
  1. Const BadChars As String = "[!-/:-■]"
  2.  
  3. Private Sub TextBox3_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox3.KeyPress
  4.    If Not IsNumeric(e.KeyChar) And Not Char.IsControl(e.KeyChar) And e.KeyChar <> "." And Asc(e.KeyChar) <> 8 Then
  5.        e.Handled = True
  6.    If e.KeyChar = "." And TextBox3.Text.IndexOf(".") <> -1 Then
  7.        e.Handled = True
  8. End Sub
  9.  
  10. Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged
  11.    TextBox3.Text = Regex.Replace(TextBox3.Text, BadChars, "")
  12. End Sub

lo que aparece como "&#9632;" es el caracter ascii 254


Título: Re: RegEx
Publicado por: Valkyr en 15 Septiembre 2011, 16:15 pm
Sí es una expresión regular ¿por qué no usas esto?:

Código:
[^\d\.]+

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

Saludos.


Título: Re: RegEx
Publicado por: CH4ØZ en 16 Septiembre 2011, 00:21 am
wow gracias. eso funciono perfecto. no se me ocurrio xq todavía no termino de comprender RegEx.