结合两个正则表达式验证器

时间:2012-02-23 18:53:02

标签: c# asp.net validation

我希望验证电子邮件输入字符串,因此它是有效的电子邮件。我希望检查电子邮件字符串的长度,因此它不超过60个字符。 我正在使用RegularExpressionValidator ..我有两个,一个用于验证电子邮件模式,另一个用于验证长度。但这似乎不起作用。我可以一次使用一个没有问题,但是如果我同时使用它们,它们都会在没有错误的地方显示错误。

这些可以合并吗?或者是否有更好的regualexpression同时验证电子邮件和长度?

控制:

<%-- Validate EmailAddress --%>
<asp:RequiredFieldValidator ID="EmailAddressRequiredFieldValidator" runat="server" 
ErrorMessage="..." ControlToValidate="EmailAddressInsertTextBox" Display="None" ValidationGroup="InsertValidationGroup" />          

<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="EmailAddressInsertTextBox" ErrorMessage="......" ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" Display="None" ValidationGroup="InsertValidationGroup" />

<asp:RegularExpressionValidator ID="EmailAddressRegularExpressionValidator2" runat="server" ControlToValidate="EmailAddressInsertTextBox" ErrorMessage="..............." ValidationExpression="^[\w\s]{1,60}$" Display="None" ValidationGroup="InsertValidationGroup" />

3 个答案:

答案 0 :(得分:1)

我不是说这是最好的方法,但是如果你想要结合两个正则表达式,你通常可以选择positive lookbehind

下面的代码由一个字段值匹配,该字段值从头到尾包含1-60个字符。 lookbehind确保该值与您的电子邮件模式匹配,可选地在空格之前和之后:

ValidationExpression="^.{1,60}$(?<=\s*\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*\s*)"

答案 1 :(得分:0)

没有真正的理由这不起作用。最佳做法是单独应用它们,以便针对不同的问题分别提供两条错误消息。

有一个例子,两个在同一个控件上一起工作,在这里:http://www.informit.com/articles/article.aspx?p=101137&seqNum=3(参见“清单3.6”)

也许如果你提供你的代码,它可能会成为别的东西。

修改:我尝试了您提供的代码。我将长度验证器正则表达式更改为^.{1,60}$,它对我有用。我也将显示更改为动态,所以我可以测试它,但这不会改变Page.IsValid的结果。

答案 2 :(得分:0)

我相信Regex Validator只会在字段中有文字要查看时触发。您需要额外的验证器,这是asp:RequiredFieldValidator

<asp:RequiredFieldValidator runat="server" ControlToValidate="txtEmail" ErrorMessage="You must input an email address" />

让我们通过创建javascript函数并在我们的验证器中调用它来使其更加简单

function validateEmail(email) {
    var regex = /^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$/;
    // 60 char check
    return email.length <= 60 && regex.test(email);
}