2015-06-09 17 views
1

如何验证WPF中的RichTextbox?我想验证电子邮件和电子邮件分隔符的文本,即应该用分号输入电子邮件。如何验证WPF中的RichTextbox?

的XAML:

   <StackPanel Orientation="Horizontal">      
       <RichTextBox x:Name="txtEmail" Style="{StaticResource ContentRichTextBox}" 
          ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Auto" Margin="0,0,10,0"> 
        <FlowDocument> 
         <Paragraph LineHeight="5"></Paragraph> 
        </FlowDocument > 
       </RichTextBox> 
      </StackPanel> 
      <StackPanel HorizontalAlignment="Center"> 
       <TextBlock x:Name="txterrormessage" Width="300" Foreground="#FFE5572C" FontSize="14" Visibility="Hidden" TextWrapping="Wrap"></TextBlock> 
      </StackPanel> 
      <StackPanel HorizontalAlignment="Center" Margin="60,0,0,0"> 
       <Button x:Name="BtnEmail" Style="{StaticResource ShortButtonStyle}" Content="NEXT" Margin="10" Command="{Binding CommandChanged}" CommandParameter="PROJECTS" Click="BtnEmail_Click"/> 
      </StackPanel> 

这是我的代码:

private void BtnEmail_Click(object sender, RoutedEventArgs e) 
    { 
     string richText = new TextRange(txtEmail.Document.ContentStart, txtEmail.Document.ContentEnd).Text; 

     if (!Regex.IsMatch(richText, @"^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$")) 
     { 
      txterrormessage.Text = "Enter a valid email"; 
      txterrormessage.Visibility = System.Windows.Visibility.Visible; 
     } 
     else 
     { 
      txterrormessage.Visibility = System.Windows.Visibility.Hidden; 
     } 

     if (!Regex.IsMatch(richText, @"^((\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)\s*[;]{0,1}\s*)+$")) 
     { 
      txterrormessage.Text = "Separate emails with ;"; 
      txterrormessage.Visibility = System.Windows.Visibility.Visible; 
     } 
} 

的代码似乎没有工作....如何验证?

感谢

回答

1

最简单的方法我见过这样做是

private void OnVerifyEmail() 
    { 
     var recipients = richText.Split(';', StringSplitOptions.RemoveEmptyEntries); 
     var validator = new System.ComponentModel.DataAnnotations.EmailAddressAttribute(); 
     foreach (var recipient in recipients) 
     { 
      var isValid = validator.IsValid(recipient.Trim()); 
      if(!isValid) 
      { 
      // do your thing here 
      } 
     } 
    } 
+0

从哪里我会得到EmailAddressAttribute()? – user4582348

+0

对不起!编辑指定完整路径。 –

+0

干净简单:)+1 –

1

格式的richText验证之前:

richText = Regex.Replace(richText, @"(\n|\r)", "", RegexOptions.Multiline); 

编辑:

这是整个方法和你正在寻找可能的内容:

private void BtnEmail_Click(object sender, RoutedEventArgs e) 
    { 
     string richText = new TextRange(txtEmail.Document.ContentStart, txtEmail.Document.ContentEnd).Text; 
     richText = Regex.Replace(richText, @"(\n|\r)", "", RegexOptions.Multiline); 
     richText = Regex.Replace(richText, @"(;|;)", ";", RegexOptions.Multiline); 
     txterrormessage.Visibility = System.Windows.Visibility.Hidden; 

     if (!Regex.IsMatch(richText, @"^[\W]*([\w+\-.%][email protected][\w\-.]+\.[A-Za-z]{2,4}[\W]*,{1}[\W]*)*([\w+\-.%][email protected][\w\-.]+\.[A-Za-z]{2,4})[\W]*$")) 
     { 
      string[] emails = Regex.Split(richText, ";", RegexOptions.Multiline); 
      foreach (string item in emails) 
      { 
       if (string.IsNullOrEmpty(item)) 
        continue; 

       if (!Regex.IsMatch(item, @"^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$")) 
       { 
        txterrormessage.Text = item + " is not a valid email address"; 
        txterrormessage.Visibility = System.Windows.Visibility.Visible; 
        break; 
       } 
      } 
      if (string.IsNullOrEmpty(txterrormessage.Text)) 
      { 
       txterrormessage.Text = "Separate emails with ; "; 
       txterrormessage.Visibility = System.Windows.Visibility.Visible; 
      } 
     } 
    }