2017-05-15 16 views
1

私はちょうどテキストボックスを使用してユーザーの入力を検証しようとしています。しかし、一度に1つの文字を入力することしかできません。彼らは完全な電子メールアドレスを入力するまで、一度に1つの文字をチェックする方法はわかりません。 Regex、電子メールの妥当性確認をテキストボックスから受け取ります

は、私は、これはそれがコピーしてペーストされるまでの障害になります文字が入力されるごとに、時間をチェックしていると思います。

 string strRegex = @"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" + 
      @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$"; 

     Regex re = new Regex(strRegex); 
     if (re.IsMatch(txtEmail.Text) || txtEmail.Text == "" || txtEmail.Text.Length > 100 && txtEmail.Text.Length < 10) 
     { 
      MessageBox.Show("Thanks"); 

     } 

     else 
     { 
      MessageBox.Show("Please enter a valid email address"); 



     } 

    } 
+0

I 'var email = new MailAddress(string_to_check)'の代わりにユーザ名とドメイン名に 'MailAddress'を使うのが望ましいですが、TLDチェックを追加することもできます(TLDに特定の正規表現を使用する)。 –

+0

ありがとう、しかし、私は自分の関数にこれを実装する方法は? – whatdoyouNeedFromMe

+0

'try'ブロックの' MailAddress'インスタンスへの引数として有効な文字列を渡すregexを使ってTLDの部分をチェックした後に実装できると思います。無効な電子メールの場合は、 'catch'ブロックを使用して' MessageBox.Show'で無効な電子メールメッセージをスローします。 –

答えて

0

はあなたがからkeyup、keydownのイベントに検証することが可能性があります。変更イベントで検証します。

あなたはWinフォームアプリケーションで行っている場合は、focusleaveイベントでそれを行うことができますに

0

@Tetsuya山本はこれは私がこれまで持っているものですが、イムわからない、これはあなたが何を意味するかである場合

 string strRegex = @"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" + 
     @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$"; 

     Regex re = new Regex(strRegex); 
     if (re.IsMatch(txtEmail.Text) || txtEmail.Text == "" || txtEmail.Text.Length > 100 && txtEmail.Text.Length < 10) 
     { 
      try 
      { 
       var email = new MailAddress(strRegex); 
       MessageBox.Show("Thanks"); 
      } 
      catch (FormatException) 
      { 
       MessageBox.Show("Wrong"); 


      } 
関連する問題