C# 电子邮件正则表达式验证
是否有人可以更正下面的表达式,使其也不允许空白字段C# 电子邮件正则表达式验证,c#,asp.net,.net,regex,validation,C#,Asp.net,.net,Regex,Validation,是否有人可以更正下面的表达式,使其也不允许空白字段 <asp:RegularExpressionValidator ID="expEmail" runat="server" ControlToValidate="txtEmail" ErrorMessage="valid email address required" ValidationExpression="^([a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-
<asp:RegularExpressionValidator ID="expEmail" runat="server" ControlToValidate="txtEmail" ErrorMessage="valid email address required" ValidationExpression="^([a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]){1,70}$"></asp:RegularExpressionValidator>
还要添加一个必需的字段验证器-我认为只有当字段中有文本可查看时,正则表达式验证器才会启动。解决方案之一(不是最好的)是实现一些正则表达式:
^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$
样本:someone@example.com
但实际上,编写和维护一个好的电子邮件验证regexp是非常困难的。你不应该100%信任你的正则表达式。你可以在互联网上找到几篇关于这一困难的文章:
<asp:RequiredFieldValidator ID="reqEmail" ControlToValidate="txtEmail" runat="server" ErrorMessage="Email address required"></asp:RequiredFieldValidator>
谢谢,您需要使用额外的验证器-
你不能做点像这样的吗
if (txtEmail.Text.Trim().length > 0) then
validate
我认为,由于正则表达式相当复杂,任何可以在正则表达式之外完成的事情都应该在正则表达式之外完成,这应该使代码更具可读性,但这只是我的问题
您的正则表达式非常复杂,您应该找到一个更简单的正则表达式。
无论如何,您可以这样做:^(regex){1}$另一种选择是使用.netCustomValidator,将其ValidateEmptyText设置为True,对于电子邮件地址验证,您可以使用JavaScript函数,该函数将在验证器的ClientValidationFunction属性中指定。这可以通过在
系统.Text.RegularExpressions中使用Regex
类来完成:
void Page_Load(Object sender, EventArgs e)
{
string uNameExpr = "^[a-zA-Z](.{1,9})$";
string phoneExpr =
"((\\(\\d{3}\\) ?)|(\\d{3}-))?\\d{3}-\\d{4}";
// Define validation expressions.
RegExprVal1.ValidationExpression = uNameExpr;
RegExprVal2.ValidationExpression = phoneExpr;
ReqFldVal1.Text = "User name is required";
RegExprVal1.Text = "Must be between 2 to 10 characters";
RegExprVal2.Text = "Please provide a valid number: (425) 555-0187";
// ErrorMessages appear in ValidationSummary.
RegExprVal1.ErrorMessage = "Incorrect UserName format. Name" +
" can be 2 to 10 characters long";
ReqFldVal1.ErrorMessage = "User name required";
RegExprVal2.ErrorMessage =
"Please provide a valid number: (000) 000-0000";
}
void OnCmdClick(Object sender, EventArgs e)
{
if (Page.IsValid)
{
ActiveForm = Form2;
}
}
private bool ValidateEmail()
{
string email = txtemail.Text;
Regex regex = new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$");
Match match = regex.Match(email);
if (match.Success)
return true;
else
return false;
}
顺便说一句,该表达式无效,例如加号(+)将触发错误。很难编写正确的regexp来验证电子邮件。下面的链接应该是一个适用于所有有效电子邮件的链接,但regexp的长度远远超过6000个字符。。。我真的很生气。意味着你不能使用谷歌邮件过滤器…我想这可能是一个值得你阅读的链接。这是我不久前从HackerNews上学到的一个元讨论,我认为这很有趣:问题中已经使用了必需的字段验证器。用户提出的问题是验证在所需字段验证器中编写的正则表达式。@Phani Kumar PV-Um,不,不是。但是你让我看:)不起作用,因为每个错误都会在页面上留下标签的空间,所以第二个错误会漂浮在右侧等等。有什么解决方案吗?@Pino-将验证程序上的显示属性设置为动态。那么.info域呢?这突出了正则表达式不好的原因。它在技术上也是有效的,不需要在最后一部分的dot,如果你运行一个国家的DNS,你可以bob@ly. 然后你也可以在子域中发送电子邮件,bob@foo.lemon.bar.ac.uk. 因此,此正则表达式不包含它。如果有效电子邮件为bob_@hotmail.com
void Page_Load(Object sender, EventArgs e)
{
string uNameExpr = "^[a-zA-Z](.{1,9})$";
string phoneExpr =
"((\\(\\d{3}\\) ?)|(\\d{3}-))?\\d{3}-\\d{4}";
// Define validation expressions.
RegExprVal1.ValidationExpression = uNameExpr;
RegExprVal2.ValidationExpression = phoneExpr;
ReqFldVal1.Text = "User name is required";
RegExprVal1.Text = "Must be between 2 to 10 characters";
RegExprVal2.Text = "Please provide a valid number: (425) 555-0187";
// ErrorMessages appear in ValidationSummary.
RegExprVal1.ErrorMessage = "Incorrect UserName format. Name" +
" can be 2 to 10 characters long";
ReqFldVal1.ErrorMessage = "User name required";
RegExprVal2.ErrorMessage =
"Please provide a valid number: (000) 000-0000";
}
void OnCmdClick(Object sender, EventArgs e)
{
if (Page.IsValid)
{
ActiveForm = Form2;
}
}
private bool ValidateEmail()
{
string email = txtemail.Text;
Regex regex = new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$");
Match match = regex.Match(email);
if (match.Success)
return true;
else
return false;
}