.Net RegularExpressionValidator帮助(空或超过6个字符)?

时间:2009-08-26 19:32:52

标签: .net regex validation

我希望接受(6个字符长或无字符)的值。

这是一个更新表格。如果输入密码,我想强制使用6个字符。如果没有,我想忽略该字段。

这是一个REGEX,它让我获得6个char部分,还有任何关于处理空的帮助吗?

<asp:RegularExpressionValidator id="rev1" runat="server" SetFocusOnError="True"
ErrorMessage="Password must be 6 characters long" Display="Dynamic"
ControlToValidate="TextBox1" ValidationExpression="^[a-zA-Z0-9]{6}$">

5 个答案:

答案 0 :(得分:2)

^([a-zA-Z0-9]{6}|)$

你甚至可以将它缩短为

^(\w{6}|)$

\ w表示'单词字符'

答案 1 :(得分:2)

不确定我的问题是否正确但是RegularExpressionValidator不验证空输入。换句话说,如果TextBox1为空,则Page.IsValid将为true。

答案 2 :(得分:1)

可能的解决方案:

^[a-zA-Z0-9]{6}$|^$

只允许6个字符,或者为空,只允许其他字符。

答案 3 :(得分:0)

我知道这不是您正在寻找的答案,但我总是看看是否可以使用服务器端方法OnValidate将此类验证放入CustomValidator。

正则表达式很有趣,非常适合益智游戏,但总有人不会得到它们,也不会理解你在做什么。

总是试图在可读性和易于理解方面犯错,特别是如果你预见到你不会是维持解决方案的人。

虽然这看起来过于冗长,但我发现这是一种从长远来看最不悲伤的解决方案。

我会在ASP页面中使用这样的CustomValidator:

<asp:CustomValidator ID="rev1" runat="server" 
            ValidateEmptyText="true"
            ControlToValidate="TextBox1" 
            SetFocusOnError="True" 
            Display="Dynamic"
            OnServerValidate="validatePasswordField"
            ErrorMessage="Password must be 6 characters long"/>

在代码隐藏中,我会这样做:

private const int EMPTY_PASSWORD_LENGTH = 0;
private const int MIN_PASSWORD_LENGTH = 6;
private const int MAX_PASSWORD_LENGTH = 6;

protected void validatePasswordField(object source, 
                                     ServerValidateEventArgs args) {
    if (source == null) return;

    string candidatePassword = TextBox1.Text;

    args.IsValid = isValidPasswordText(candidatePassword);
}

private bool isValidPasswordText(string candidate) {
    return candidate.Length == EMPTY_PASSWORD_LENGTH
        || (candidate.Length >= MIN_PASSWORD_LENGTH 
            && candidate.Length <= MAX_PASSWORD_LENGTH);
}

嗯,实际上我将isValidPasswordText(string)定义拉出到业务层类中,但这更像是一个架构决策。

答案 4 :(得分:0)

我认为如果您只想使用验证控件来验证长度和空字符串,您应该使用customervalidator。

  protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
    string txtpassword = txtboxPassword.Text;
    if (txtpassword == string.Empty || txtpassword.Length == 6)
    {
        args.IsValid = true;
    }
    else
    {
        args.IsValid = false;
    }
}

protected void Button1_Click(object sender, EventArgs e)
{
    if (Page.IsValid)
    {
        Response.Redirect("Next.aspx");
    }
}