我目前正在使用 Asp.net、c#、Mvc2 构建一个系统,它使用以下正则表达式:
^([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(model.Email, @"^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$"))
ModelState.AddModelError("Email", "The field Email is invalid.");
正则表达式可以很好地验证电子邮件,但是如果将一个特别长的字符串传递给正则表达式并且它是无效的,它会导致系统继续“工作”而不解析页面。例如,这是我试图传递的数据:
iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
上述字符串导致系统基本上锁定。我想知道为什么以及是否可以使用正则表达式以更简单的方式完成相同的事情。我的目标是不传递格式不正确的电子邮件地址,例如以下内容:
host.@.host..com