Ho utilizzato entrambe le seguenti espressioni regolari per il test di un'espressione di posta elettronica valida con controlli di convalida ASP.NET. Mi stavo chiedendo quale sia l'espressione migliore dal punto di vista delle prestazioni, o se qualcuno ne ha una migliore.Migliore espressione regolare per convalida formato e-mail con convalida ASP.NET 3.5
- \w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* - ^([0-9a-zA-Z]([-\.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$
sto cercando di evitare la "espressione esponenzialmente lento" problema descritto sul BCL Team Blog.
UPDATE
in base al feedback Ho finito per creare una funzione per verificare se una e-mail valida:
Public Function IsValidEmail(ByVal emailString As String, Optional ByVal isRequired As Boolean = False) As Boolean
Dim emailSplit As String()
Dim isValid As Boolean = True
Dim localPart As String = String.Empty
Dim domainPart As String = String.Empty
Dim domainSplit As String()
Dim tld As String
If emailString.Length >= 80 Then
isValid = False
ElseIf emailString.Length > 0 And emailString.Length < 6 Then
'Email is too short
isValid = False
ElseIf emailString.Length > 0 Then
'Email is optional, only test value if provided
emailSplit = emailString.Split(CChar("@"))
If emailSplit.Count <> 2 Then
'Only 1 @ should exist
isValid = False
Else
localPart = emailSplit(0)
domainPart = emailSplit(1)
End If
If isValid = False OrElse domainPart.Contains(".") = False Then
'Needs at least 1 period after @
isValid = False
Else
'Test Local-Part Length and Characters
If localPart.Length > 64 OrElse ValidateString(localPart, ValidateTests.EmailLocalPartSafeChars) = False OrElse _
localPart.StartsWith(".") OrElse localPart.EndsWith(".") OrElse localPart.Contains("..") Then
isValid = False
End If
'Validate Domain Name Portion of email address
If isValid = False OrElse _
ValidateString(domainPart, ValidateTests.HostNameChars) = False OrElse _
domainPart.StartsWith("-") OrElse domainPart.StartsWith(".") OrElse domainPart.Contains("..") Then
isValid = False
Else
domainSplit = domainPart.Split(CChar("."))
tld = domainSplit(UBound(domainSplit))
' Top Level Domains must be at least two characters
If tld.Length < 2 Then
isValid = False
End If
End If
End If
Else
'If no value is passed review if required
If isRequired = True Then
isValid = False
Else
isValid = True
End If
End If
Return isValid
End Function
Note:
- IsValidEmail è più restrittivo sui caratteri consentiti quindi la RFC, ma non verifica tutti i possibili usi non validi di quei caratteri
possibile duplicato di [Best Regular Expression per Email Validation in C#] (http: // StackOverflow .com/domande/16167983/best-regular-expression-per-email-validazione-in-c-sharp) – Milad