【发布时间】: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