2016-09-17 79 views
2

这是一个家庭作业的问题,但我真的卡住,并希望你的帮助。这是小事,我会确定它会解决它。 Q使用正则表达式,编写一个程序输入建议的电子邮件地址并报告是否被接受。必须是[email protected]的形式。然而,有一个转折点,允许用户在列表框中输入特殊字词,例如网站管理员,政府部门,如果其中包含这些词语,该列表框也会拒绝该电子邮件地址。现在我已经尝试了以下内容,但即使列表框中没有任何内容,它也会给我“无效的电子邮件”。第一个if语句完美地工作..我的问题是从列表框中获取这些特殊字词来拒绝电子邮件。感谢密尔家伙电子邮件地址检查与列表框项目

private void button1_Click(object sender, EventArgs e) 
    { 

     string special = null; 
     special = Convert.ToString(listBox1.Text); 
     string pattern = null; 
     pattern = "^([0-9a-zA-Z]([-\\.\\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\\w]*[0-9a-zA-Z]\\.)+[a-zA-Z]{2,9})$"; 

     if (Regex.IsMatch(textBox1.Text, pattern)) 
     { 
      MessageBox.Show("Valid Email address"); 

     } 

     if (Regex.IsMatch(textBox1.Text, special)) 
      { 
      MessageBox.Show("Not a valid Email address"); 
     } 

     else 
     { 
      MessageBox.Show("Not a valid Email address"); 
     } 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     listBox1.Items.Add(textBox2.Text); 

    } 

    private void button3_Click(object sender, EventArgs e) 
    { 


      listBox1.Items.Remove(listBox1.SelectedItem); 

    } 
} 

}

+0

也许会让不准的单词的列表,当你按下按钮,有它检查是否一个关键词从该列表是输入字符串? – Werdna

+0

嗯我已经做了另一个列表现在得到由listbox1填充,并有新的列表作为参数来检查输入字符串,但没有运气,除非我做错了 – Almendro

+0

更新您的问题与新代码 – Werdna

回答

1

我会被你的班级您的电子邮件地址模式的顶部和保留字列表定义开始:

private const String PATTERN = "^([0-9a-zA-Z]([-\\.\\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\\w]*[0-9a-zA-Z]\\.)+[a-zA-Z]{2,9})$"; 
private List<String> _reserved; 

public Form1() 
{ 
    InitializeComponents(); 
    _reserved = new List<string>(); 
    _reserved.Add("admin"); 
    _reserved.Add("administrator"); 
    _reserved.Add("government"); 
    _reserved.Add("helpdesk"); 
    _reserved.Add("webmaster"); 
} 

填写此列出任何不允许的单词。按字母顺序填充它们将有助于在需要添加或删除某些内容时维护列表。

以上列表是预填充的,但它也可以是您根据需要创建的任何列表。

检查,看看是否有人通过检查其对你的列表中提供的保留字:

private bool Reserved(String email) 
{ 
    var result = false; 
    if (!String.IsNullOrEmpty(email)) 
    { 
     var lc = email.ToLower(); 
     result = _reserved.Any(x => -1 < x.IndexOf(lc)); 
    } 
    return result; 
} 

Enumerable.Any Method返回一个布尔值,如果集合(由上述x表示)中的任何一个项匹配以下条件-1 < x.IndexOf(lc))

String.IndexOf Method回报不管你在传“中第一次出现的从零开始的索引”。

如果你的保留字全部小写,并在您的变量传递较低的情况下,任何的IndexOf即大于-1将是一个失败(意思是,你的一个保留字匹配)。

现在,验证您的电子邮件地址已经成为一个简单的任务:

public void ValidateEmail(String email) 
{ 
    if (!Reserved(email)) 
    { 
     var ok = System.Text.RegularExpressions.Regex.IsMatch(email, PATTERN); 
     if (!ok) 
     { 
      MessageBox.Show("Failed Email Format"); 
     } 
    } else 
    { 
     MessageBox.Show("Reserved Word"); 
    } 
} 
+0

Jpcode,你能解释一下你的linq部分代码吗?我从来没有见过这样的事情。感谢队友 – Werdna

+0

粗略翻译,“IndexOf(email_lowerCase)大于-1的任何元素(x)”。如果不匹配,[String.IndexOf](https://msdn.microsoft.com/en-us/library/system.string.indexof.aspx)方法将返回“-1”。因此,您想知道集合中的[Linq.Any](https://msdn.microsoft.com/en-us/library/bb534972.aspx)项是否与您传入的电子邮件(小写)匹配。 – jp2code

+0

感谢解释说:) – Werdna

0
namespace emailCheck 
{ 

    public partial class Form1 : Form 
    { 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     bool found = false; 
     int lenght, index; 
     index = 0; 
     lenght = listBox1.Items.Count; 
     label1.Text = Convert.ToString(listBox1.Items[index]); 
     string pattern = null; 
     pattern = "^([0-9a-zA-Z]([-\\.\\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\\w]*[0-9a-zA-Z]\\.)+[a-zA-Z]{2,9})$"; 

     while ((found == false) && (index < lenght)) 
     { 
      if (Regex.IsMatch(textBox1.Text, Convert.ToString(listBox1.Items[index]))) 
      { 
       found = true; 
       MessageBox.Show("Not a valid Email address"); 
      } 
      else 
      { 
       index++; 
      } 
     } 
     while (found == false) 
     { 
      if (Regex.IsMatch(textBox1.Text, pattern)) 
      { 
       found = true; 
       MessageBox.Show("Valid Email address"); 
      } 
      else 
      { 
       MessageBox.Show(" Invalid Email address"); 
      } 
     } 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     listBox1.Items.Add(textBox2.Text); 
    } 

    private void button3_Click(object sender, EventArgs e) 
    { 
      listBox1.Items.Remove(listBox1.SelectedItem); 
    } 

    private void label2_Click(object sender, EventArgs e) 
    { 

    } 

    } 
}