2016-09-17 11 views
2

これは宿題の質問ですが、私は本当に立ち往生しており、あなたの助けに感謝します。それは私が確信しているそれを修正する小さなものです。 Qは正規表現を使用しています。提案された電子メールアドレスを入力し、それが受け入れられるかどうかを報告するプログラムを作成しています。 [email protected]の形式である必要があります。しかし、ひねりがあり、ウェブマスター、政府機関などの特別な単語をリストボックスに入力できるようになります。リストボックスには、これらの単語の1つが含まれているとメールアドレスも拒否されます。今、私は以下を試してみましたが、リストボックスに何もないのに "無効な電子メール"が表示されます。最初の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

ええ、私はリストボックス1によって設定された別のリストを作成しました。間違っていない限り、入力文字列に対してチェックするパラメータとして新しいリストを持っています。 – 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"); 
} 

これを埋めます許可されていない単語はすべて一覧にします。アルファベット順に記入すると、何かを追加または削除する必要があるときはいつでもリストを維持するのに役立ちます。

上記のリストはです。があらかじめ入力されていますが、必要に応じて作成されるリストでもかまいません。 (上記xと表記)コレクション内の任意の単一の項目が一致した場合

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がTrueのブール値を返します:誰かがあなたのリストに対してそれをチェックすることにより、予約語を提供するかどうかを確認するためにチェック

条件-1 < x.IndexOf(lc))に従う。

String.IndexOf Method戻りますが、渡しどんなの「最初に見つかった位置のインデックスは、」。

ご予約語はすべて小文字であり、あなたは小文字、ある任意のIndexOfメソッドとして、あなたの変数に渡す場合-1より大きい値は失敗(予約語の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) 
    { 

    } 

    } 
} 
関連する問題