【问题标题】:Email validation issue电子邮件验证问题
【发布时间】:2020-01-10 07:30:34
【问题描述】:

我正在尝试验证电子邮件地址字段。我使用Regex 完成了它,它工作正常,但问题是

我在validating 事件中将e.cancel 设置为True,因此除非用户输入正确的电子邮件ID,否则它不允许用户更改焦点,即使这不是问题,但它甚至不会允许用户关闭窗口/表单。

我的意思是如果用户尝试abort complete transaction 他/她需要输入有效的电子邮件 ID。

这是我的代码 -

  Private Sub tbemail_Validating(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles tbemail.Validating

    Dim pattern As String = "^[a-z][a-z|0-9|]*([_][a-z|0-9]+)*([.][a-z|0-9]+([_][a-z|0-9]+)*)?@[a-z][a-z|0-9|]*\.([a-z][a-z|0-9]*(\.[a-z][a-z|0-9]*)?)$"


    Dim match As System.Text.RegularExpressions.Match = Regex.Match(tbemail.Text.Trim(), pattern, RegexOptions.IgnoreCase)
    If (match.Success) Then
    Else
        MessageBox.Show("Please enter a valid email id", "Checking")
        e.Cancel = True
    End If
End Sub

【问题讨论】:

  • 永远不要写像这样愚蠢的If...Else 语句。如果您有一个空的 If 块,那么您只是编写了错误的代码。如果您只关心一种情况,请对其进行测试并删除Else,即If Not match.Success Then
  • 是的!我会记住这一点。谢谢
  • 有更好的方法来检查有效的电子邮件地址:Validating an email address。基本上,Try 制作一个New MailAddress(tbemail.Text.Trim())
  • @jmcilhinney 一个例外是,如果您想在代码中“记录”您在设计中确实考虑了 If 的替代条件,但您不想发生任何事情。但是,该分支中至少应该有一个 COMMENT。例如If x = 1 Then ' Business owner explicitly wants nothing to happen when it's 1 Else DoSomething End If

标签: vb.net validation


【解决方案1】:

您应该将 Cancel 按钮的 CausesValidation 属性设置为 False。这样,单击它不会引发Validating 事件,即使最后一个控件中的数据无效,您也可以关闭表单。这假定表单是通过调用ShowDialog 显示的。

【讨论】:

  • 如果我将取消按钮的 CausesValidation 属性设置为 False,用户将能够在字段中输入错误的值。我只是不想让用户输入错误的值。
  • 您明确表示,如果用户输入无效数据,您将无法关闭表单。我告诉过你如何在用户输入无效数据时关闭表单。
  • 从这个意义上说,删除验证事件是更好的选择。即使这样我也可以关闭表单。
  • “我在问题中主动提到了这一点”。不,你没有。您的问题中没有提到CausesValidation。你混淆了CausesValidatione.Cancel?。你只是把一些如此简单的事情变得复杂。用户可以随时输入无效数据。你无法阻止它。您可以做的是阻止他们处理无效数据。如果他们单击 Cancel 按钮,那么他们就没有进行。如果他们取消,它不会对任何控制中的内容产生任何影响,因为您不会使用任何数据。
猜你喜欢
  • 1970-01-01
  • 2018-12-22
  • 2019-06-16
  • 1970-01-01
  • 2017-10-23
  • 2011-04-19
  • 2019-07-31
  • 2016-06-13
  • 2013-02-15
相关资源
最近更新 更多