如果不正确则取消事件的正则表达式

Posted

技术标签:

【中文标题】如果不正确则取消事件的正则表达式【英文标题】:Regular expression to cancel event if incorrect 【发布时间】:2016-08-04 21:13:56 【问题描述】:

我在 c# winforms 中有一个正则表达式。我有它来确定格式是否正确。如果正确,它将继续保存,但如果正确,它将显示其验证并取消保存事件。

验证码

private void emailTxt_Validating(object sender, CancelEventArgs e)

    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)$";

    if (Regex.IsMatch(emailTxt.Text, pattern))
    
        e.Cancel = false;
    
    else
    
        e.Cancel = true;
        errorEmail.SetError(emailTxt, "Incorrect Format Try... email@email.com");
        CancelBtn.Enabled = true;              
    

保存代码

private void SaveBtn_Click(object sender, EventArgs e)
        
            //SQL Connection and SQL for inserting a new admin
            SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0; AttachDbFilename=C:\Users\Donald\Documents\Visual Studio 2013\Projects\DesktopApplication\DesktopApplication\Student_CB.mdf ;Integrated Security=True");
            con.Open();

            if (ValidateChildren(ValidationConstraints.Enabled))
            
                try
                
                    string sql = "INSERT INTO Admin (Admin_Username, Admin_FName, Admin_SName, Admin_Email, Admin_Password) " + "VALUES (@adminName, @adminFirstname, @adminSurname, @adminEmail, @adminPassword);";

                    using (var cmd = new SqlCommand(sql, con))
                    
                        cmd.Parameters.AddWithValue("@adminName", usernameTxt.Text);
                        cmd.Parameters.AddWithValue("@adminFirstname", firstnameTxt.Text);
                        cmd.Parameters.AddWithValue("@adminSurname", surnameTxt.Text);
                        cmd.Parameters.AddWithValue("@adminEmail", emailTxt.Text);
                        cmd.Parameters.AddWithValue("@adminPassword", passwordTxt.Text);
                        cmd.ExecuteNonQuery();
                    

                    MessageBox.Show("Admin Successfully Added!");

                    this.Close();

                

                catch (Exception ex)
                

                    MessageBox.Show(ex.Message);


                
            

            con.Close();
        

它表明它的格式不正确,但即使格式不正确,它也会继续保存事件。

【问题讨论】:

错误在其他地方,我们看不到。什么是保存代码? @GiorgiNakeuri 我已经用我的保存代码更新了上面的代码。 你能不能显示validateChildren方法 @Valentin 以上是全部代码。 @DonaldBury,应该是 ValidateChildren 方法。你应该展示它。 【参考方案1】:

我已经通过将它嵌套在已经验证其是否为空的函数中来使其工作。这似乎有效。

private void emailTxt_Validating(object sender, CancelEventArgs e)
    

    if (string.IsNullOrWhiteSpace(emailTxt.Text))
    
        e.Cancel = true;
        errorEmail.SetError(emailTxt, "Email is Empty!");
        CancelBtn.Enabled = true;
    
    else
    
        string email = emailTxt.Text;
        Regex regex = new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w)2,3)+)$");
        Match match = regex.Match(email);

        if (match.Success)
        
            e.Cancel = false;
        
        else
        
            e.Cancel = true;
            errorEmail.SetError(emailTxt, "Incorrect Format Try... email@email.com");
            CancelBtn.Enabled = true;
            return;
                                        
    

【讨论】:

以上是关于如果不正确则取消事件的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式:如果条件发生则匹配值

如果变量与正则表达式不匹配,则失败

带有 4 位小数的货币格式正则表达式,如果没有则不显示美分

无法正则表达式文本区域,但如果它是输入则可以

HihoCoder - 1110

如何在 Asp.Net MVC 中将正则表达式分解为多个正则表达式?