PDA

View Full Version : [.Net] RegExp per e-mail


mslvm
05-12-2005, 18:16
dove trovo una espressione regolare per valutare la sintassi delle e-mail? ho cercato su google ma da quanto ho visto sulle espressioni regolari nel .net framework usando l'oggetto system.text.regularexpression non c'è molto...! ho trovato praticamente di tutto, php, c, javascript... ma per il framework .net niente...! (uso visual studio 2005)... :mc: grazie 1000

mslvm
05-12-2005, 19:20
ho trovato qualcosa sulla documentazione di msdn ma ci sono due problemi che dovrei risolvere nella routine che ho fatto col supporto di msdn...: Sub SearchMails(ByVal inputString As String)
Dim r As System.Text.RegularExpressions.Regex
Dim m As System.Text.RegularExpressions.Match
r = New System.Text.RegularExpressions.Regex("^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$", System.Text.RegularExpressions.RegexOptions.Multiline Or System.Text.RegularExpressions.RegexOptions.IgnoreCase)

m = r.Match(inputString)
While m.Success
ind = ind + 1
TextBox2.Text = TextBox2.Text & "Found email " & m.Groups(1).Value & " at " & m.Groups(1).Index.ToString() & vbCrLf
m = m.NextMatch()
End While
End Sub



il primo è che se passo l'argomento "mario.rossi@gmail.com" mi scrive nella textbox solo mario.rossi mentre se metto qualche altro carattere (che ne so... "<mario.rossi@gmail.com>") non me la trova proprio... come faccio a risolvere? anche un link a un po' di documentazione andrebbe bene perchè quella di msdn è molto confusa :muro:

mslvm
05-12-2005, 21:01
ho modificato la routine facendo un array in modo che l'e-mail possa essere estratta dal testo in molte forme... tipo <mario.rossi@gmail.com> oppure "mario.rossi@gmail.com"... ma c'è ancora qualcosa che non va...



Imports System.Text.RegularExpressions


Sub SearchMails(ByVal inputString As String)
dim Expression() As Regex


Dim m As Match
' <mario.rossi@gmail.com>
Expression(0) = New Regex("^<([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)>$", RegexOptions.IgnoreCase)
Dim i As Long
For i = 0 To UBound(Expression)


m = Expression(i).Match(inputString)
While m.Success = False
TextBox2.Text = TextBox2.Text & "Found email " & m.Value & " at " & m.Index.ToString & vbCrLf
m = m.NextMatch()
End While
Next i
End Sub




cosa c'è che non va? :muro:

mslvm
06-12-2005, 19:25
possibile che nessuno riesce a capire cosa non va in questo codice? :muro: :muro: l'errore dovrebbe essere nella dichiarazione dell'array di oggetti regex! non ho mai fatto un'operazione del genere!

Mavel
07-12-2005, 11:25
Intanto ti segnalo questo : http://www.regular-expressions.info/
poi mi studio il codice e provo a darti una mano ;)

Mavel
07-12-2005, 11:36
Io lavoro in C#, ho trovato questo codice che sinceramente non mi va di convertire in VB (tanto le differenze sono minime):

public static bool isEmail(string inputEmail)
{
inputEmail = NulltoString(inputEmail);
string strRegex = @"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
@"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" +
@".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";
Regex re = new Regex(strRegex);
if (re.IsMatch(inputEmail))
return (true);
else
return (false);
}

Ovviamente questo ti dice se l'e-mail è sintatticamente corretta, non se esiste veramente.