2016-09-17 28 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) 
    { 

    } 

    } 
}