2014-01-14 3 views
3

Я пытаюсь проверить, является ли userinput адресом электронной почты (добавление члена в базу данных).Проверьте, является ли вход в текстовое поле электронной почтой

Пользователь вводит данные в TextBox при вызове проверяющего события; Я хочу проверить, является ли вход действительным адресом электронной почты. Таким образом, состоящий по крайней мере из @ и точки (.) В строке.

Есть ли способ сделать это с помощью кода или, возможно, с помощью маски из MaskedTextbox?

+0

посмотреть на Regex для электронной почты проверки, вы должны быть в состоянии легко найти те – x4rf41

+0

возможный дубликат [проверка электронной почты в приложении переменного тока # WinForms] (http://stackoverflow.com/questions/1199413/email- validation-in-ac-sharp-winforms-application) – Liam

ответ

10

Не беспокойтесь о регулярном выражении. It's a Bad Idea.

Я обычно никогда исключения использовать для управления потоком в программе, но лично, в данном случае, я предпочитаю, чтобы специалисты, которые создали MailAddress класс сделать работу для меня:

try 
{ 
    var test = new MailAddress(""); 
} 
catch (FormatException ex) 
{ 
    // wrong format for email 
} 
+0

+1 для упоминания класса 'MailAddress'. Я совсем забыл об этом. – Brian

+2

@Brian Я использовал Regex. Затем я прочитал [этот ответ] (http://stackoverflow.com/a/719543/301857) и немного умер внутри. lol –

+1

Святой ад, что 'Regex' - это беспорядок ... lol. Я думаю, мне, возможно, придется удалить свой ответ на этот вопрос, поскольку я предложил использовать 'Regex' в первую очередь. – Brian

0

Я предлагаю вам использовать Regular Expression как:

@"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?" 

Для подтверждения ввода вашего текстового поля.

Пример кода:

private void button1_Click(object sender, EventArgs e) 
{ 
    Regex emailRegex = new Regex(@"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=? 
           ^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+ 
           [a-z0-9](?:[a-z0-9-]*[a-z0-9])?"); 

    if (emailRegex.IsMatch(textBox1.Text)) 
    { 
     MessageBox.Show(textBox1.Text + "matches the expected format.", "Attention"); 
    } 
} 

Edit: я нашел лучше, более полное Regex.

2

Regex для простого матча электронной почты:

@"\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b" 

Regex для RFC 2822 стандартного матча электронной почты:

@"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?" 
2

Не используйте регулярное выражение, он пропускает так много случаев, что это даже не смешно, и, кроме того, более умные люди, которых мы раньше приходили, чтобы решить эту проблему.

using System.ComponentModel.DataAnnotations; 

public class TestModel{ 
    [EmailAddress] 
    public string Email { get; set; } 
} 
+0

Это должен быть главный ответ. Он строит правильную проверку электронной почты в форме, представленной с помощью @ Html.ValidationMessageFor (m => m.Email) – SeanKPS

1

Я рекомендую вам использовать этот способ, и он хорошо работает для меня.

Regex reg = new Regex(@"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"); 
    if (!reg.IsMatch(txtEmail.Text)) 
    { 
     // Email is not valid 
    } 
+1

Просьба предоставить достаточно подробностей для ответа на вопрос ... OP упомянул, что данные поступают из «TextBox», проверки вызывается событие, и оно должно соответствовать строке с 'atleast @ и точкой (.)'. Как ваш код выполняет эти требования и где ваши переменные 'isValid' и' UserMessage' используются для достижения цели OP? – CPHPython

Смежные вопросы