Справка .Net RegularExpressionValidator (пустая или более 6 символов)? - PullRequest
0 голосов
/ 26 августа 2009

Я хочу принять значения (6 символов или ничего).

Это для формы обновления. Если пароль введен, я бы хотел использовать 6 символов. Если нет, я хочу игнорировать поле.

Вот REGEX, который дает мне 6-символьную часть, а также помощь по обработке пустых символов?

<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 ]

2 голосов
/ 26 августа 2009
^([a-zA-Z0-9]{6}|)$

Вы можете, вероятно, даже сократить его до

^(\w{6}|)$

\ w означает «символ слова»

2 голосов
/ 26 августа 2009

Не уверен, правильно ли я понял ваш вопрос, но RegularExpressionValidator не проверяет пустые входные данные. Другими словами, если TextBox1 пуст, Page.IsValid будет истинным.

1 голос
/ 26 августа 2009

Возможное решение:

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

Допускается либо 6 символов, либо пустое, ничего больше.

0 голосов
/ 27 августа 2009

Я думаю, что если вы просто хотите использовать контроль валидации для проверки длины и пустой строки, вам следует использовать customevalidator.

  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");
    }
}
0 голосов
/ 27 августа 2009

Я знаю, что это не совсем тот ответ, который вы ищете, но я всегда смотрю, могу ли я поместить такие проверки в CustomValidator с помощью серверного метода OnValidate.

Регулярные выражения забавны и хороши для головоломок, но всегда есть люди, которые не понимают их и не поймут, что вы делаете.

Всегда старайтесь ошибиться с точки зрения читабельности и простоты понимания, особенно если вы предвидите, что вы не будете единственным, кто поддерживает решение.

Хотя это может показаться слишком многословным, я считаю, что это решение с наименьшим горем в долгосрочной перспективе.

Я бы использовал CustomValidator, как это на странице ASP:

<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) в класс бизнес-уровня, но это скорее архитектурное решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...