Regularne wyrażenia - czy adres email jest poprawny?

0
 
        private bool IsValidEmail(string email)
        {
            //regular expression pattern for valid email
            //addresses, allows for the following domains:
            //com,edu,info,gov,int,mil,net,org,biz,name,museum,coop,aero,pro,tv
            string pattern = @"^[-a-zA-Z0-9][-.a-zA-Z0-9]*@[-.a-zA-Z0-9]+(\.[-.a-zA-Z0-9]+)*\.(com|edu|pl|interia|poczta|onet|vp|autograf|spoko|opoczta|windowslive.com|o2|wp|tlen|go2|hotmail|gmail|info|gov|int|mil|net|org|biz|name|museum|coop|aero|pro|tv|[a-zA-Z]{2})$";
            //Regular expression object
            Regex check = new Regex(pattern, RegexOptions.IgnorePatternWhitespace);
            //boolean variable to return to calling method
            bool valid = false;

            //make sure an email address was provided
            if (string.IsNullOrEmpty(email))
            {
                valid = false;
            }
            else
            {
                //use IsMatch to validate the address
                valid = check.IsMatch(email);
            }
            //return the value to the calling method
            return valid;
        }
             czyPoprawnyAdres = IsValidEmail(tBAdresNadawcy.Text);
                    if (czyPoprawnyAdres == true)
                    {
                        tBTrescWiadomosci.Enabled = true;
                        PocztaGmail poczta = new PocztaGmail();
                        poczta.wyslij(tBTrescWiadomosci.Text + " " + tBAdresNadawcy.Text);
                    }
                    else
                    {
                        MessageBox.Show("To nie jest poprawny adres email.", "Komunikat");
                        tBTrescWiadomosci.Enabled = false;
                    }

 

Co mam dopisać w pattern, aby taki email [email protected], był zaliczony jako poprawny adres?

0

Pewnie nic. Podejrzewam, że wystarczy gdy ze wzorca usuniesz kilka znaków. Konkretnie: zmienisz ciąg windowslive.com na windowslive, czyli usuniesz końcówkę .com.

0

Wpisywanie końcówek na sztywno nie jest najlepszym pomysłem, jak ktoś będzie chciał podać zły adres, to i tak taki poda. Wklejam wyrażenie z którego sam korzystałem (skopiowane z phpmailera):
/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\{|}~]+.)*[\w!#$%&'*+-/=?^`{|}~]+@(?:(?:(?:a-zA-Z0-9_{0,61}[a-zA-Z0-9_-]?.)+a-zA-Z0-9_{0,61}[a-zA-Z0-9_]?)|(?:[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5]).){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])]))$/`.

0

Problem polega na tym, że to wyrażenie nie uwzględnia tego znaku "_", jeżeli występuje pojawia się że adres jest błędny.

string pattern = @"^[-a-zA-Z0-9][-.a-zA-Z0-9]*@[-.a-zA-Z0-9]+(\.[-.a-zA-Z0-9]+)*\.(com|edu|pl|interia|poczta|onet|vp|autograf|spoko|opoczta|windowslive.com|o2|wp|tlen|go2|hotmail|gmail|info|gov|int|mil|net|org|biz|name|museum|coop|aero|pro|tv|[a-zA-Z]{2})$"; 
0

To Twoje wyrażenie w ogóle jest do d**y (tutaj sobie zobacz, to nie powinno przejść). Jeśli na siłę chcesz wpisywać końcówki ręcznie, to zrób to, a fragment do znaku @ weź z tego co Ci podałem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1