Validar un textbox que contenga un mail

shn
17 de Enero del 2005
Hola, espero que alguien me pueda ayudar. Lo que quiero saber es como puedo validar un textbox que reciba un mail, pero que el "@" (arroba) no este al comienzo y que despues del arroba puedan existir hasta 3 puntos "."

Se que debo utilizar InStr para ver las posiciones pero no me funciona cuando le coloco un errorprovider. Hasta aqui esto es lo que he avanzado:

Private Sub txtMail_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtMail.Validating
Dim micaja As TextBox
Dim cadena As String
micaja = CType(sender, TextBox)
cadena = Val(micaja.Text)

If InStr(cadena, "@") = 1 And InStr(cadena, ".") < InStr(cadena, "@") Then
ErrorProvider1.SetError(micaja, "Escriba correctamente su direccion de mail")
e.Cancel = True

Else
ErrorProvider1.SetError(micaja, "")
End If
End Sub

DonNadie
17 de Enero del 2005
Hola: Se me ocurre algo
1) Un string con todos lo caractere válidos (excluyendo el arroba)
2)fijate que todos los caracteres antes del primer arroba estén es ese estring ej
function PrimerosValidos(s as string) as boolean
for i as integer = 0 to s.indexof("@")-1
if CaracteresValidos.indexof(s.chars(i)) = -1 then
return false
next
return true
end function
2) despues lo mismo para los que están del otro lado
(tb lo podes hacer todo de un saque contando que solo haya una @)
3)Luego fijate si queres el a que distancia del principio está el @
function distancia(s as string) as integer
return = s.indexof("@")
end function
(Mepa que es preferible que lo hagas primero)
tb podes fijarte que la distancia ente el @ y el próximo "." sea mayor a 3 (no conozco un servidor con nombre mas corto)
despues fijate que tenga almenos 2 caracteres despues del último punto, y si sos muy loco busca en internet como hacer para preguntar en un servidor si existe una dirección que ya tenes y que puede ser válida (te recomiendo que primero verifiques que sea válida por el tiempo que tarda le respuesta del servidor, quialquiercosa hablame)


Elph
17 de Enero del 2005
Buenas,

Porque no usas una expresion regular para validarlo? sera mucho mas rápido y eficiente.
Ex: (Codigo c#)
using System.Text.RegularExpressions;
//...
Match m = Regex.Match("cadena a validar","patron",RegexOptions.IgnoreCase | RegexOptions.Compiled);
if(m.Success)
//es valido
else
//no es valida

Para patrones puedes mirar en
http://www.regexlib.com/DisplayPatterns.aspx
hay un monton de patrones para correo electronico.

Suerte!