正则表达式,电子邮件验证从文本框中获取用户输入
Posted
技术标签:
【中文标题】正则表达式,电子邮件验证从文本框中获取用户输入【英文标题】:Regex, email validation taking user input from textbox 【发布时间】:2017-10-14 01:04:59 【问题描述】:我只是尝试使用文本框验证用户输入,我认为验证有效。但是,它只允许我一次输入一个字符。在他们输入完整的电子邮件地址之前,我不确定如何一次检查一个字符。
我认为这是每次输入字符时都会检查,这将导致失败,直到它被复制和粘贴。
string strRegex = @"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\\\|~\w])*)(?<=[0-9a-z])@))" +
@"(?(\[)(\[(\d1,3\.)3\d1,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");
【问题讨论】:
我更喜欢使用MailAddress
代替用户名和域名:var email = new MailAddress(string_to_check)
,但您可能还想添加 TLD 检查(对 TLD 使用特定的正则表达式)。
谢谢,但我将如何将它实现到我自己的函数中?
我认为您可以在使用正则表达式检查 TLD 部分后实现它,它将有效字符串作为参数传递给 MailAddress
块中的 MailAddress
实例。如果是无效的电子邮件,请使用catch
块来抛出带有MessageBox.Show
的无效电子邮件。
那么是在验证之后是 if 语句吗?还是之前?
【参考方案1】:
可能是您正在验证 keyup、keydown 事件。验证更改事件。
如果您在 winform 应用程序中执行此操作,则可以在 focusleave 事件中执行此操作
【讨论】:
【参考方案2】:@Tetsuya Yamamoto 这是我目前所拥有的,但我不确定这是否是你的意思
string strRegex = @"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\\\|~\w])*)(?<=[0-9a-z])@))" +
@"(?(\[)(\[(\d1,3\.)3\d1,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");
【讨论】:
以上是关于正则表达式,电子邮件验证从文本框中获取用户输入的主要内容,如果未能解决你的问题,请参考以下文章