2009-08-26 4 views
0

Je cherche à accepter des valeurs de (6 caractères longs ou rien).Aide .Net RegularExpressionValidator (vide ou plus de 6 caractères)?

Ceci est pour un formulaire de mise à jour. Si un mot de passe est entré, je voudrais forcer 6 caractères. Sinon, je veux ignorer le champ.

Voici un REGEX qui me donne la partie 6 char, toute aide sur la manipulation vide aussi?

<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}$"> 
+0

À quoi sert-il? Quelqu'un a posé une question très similaire hier, mais pas asp.net spécifique. –

+0

J'ai une grille de vue des utilisateurs, une colonne est un mot de passe "mot de passe", donnant à l'administrateur l'option d'entrer un mot de passe. – madcolor

Répondre

2

Je ne sais pas si je suis votre droit de question, mais RegularExpressionValidator ne valide pas les entrées vides. En d'autres termes, si TextBox1 est vide Page.IsValid sera vrai.

+0

+1 - C'est correct. Si TextBox1 ne contient aucune valeur, la validation réussit. – Keith

+0

+1 - Mais c'est une option que vous pouvez définir sur le contrôle. Vous pouvez demander au contrôle de toujours valider les entrées vides, mais vous pouvez également lui demander de les ignorer. –

+0

Devait tirer la même conclusion .. Merci! – madcolor

1

Solution possible:

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

Soit 6 caractères ou vide sont autorisés, rien d'autre.

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

vous pouvez probablement réduire encore à

^(\w{6}|)$ 

\ de caractère de mot w moyen

+0

\ w acceptera les caractères de soulignement (ne sait pas si le PO les veut ou non). – CAbbott

0

Je sais que ce n'est pas exactement la réponse que vous cherchez, mais je regarde toujours si je peux mettre de telles validations dans un CustomValidator avec une méthode OnValidate côté serveur. Les regex sont amusants, et parfaits pour les puzzlers mais il y a toujours des gens qui ne les comprennent pas et ne comprennent pas ce que vous faites.

Toujours essayer de se tromper du point de vue de la lisibilité et de la facilité de compréhension, surtout si vous prévoyez que vous ne serez pas celui qui maintient la solution.

Bien que cela puisse sembler trop verbeux, je trouve que c'est le genre de solution qui présente le moins de chagrin à long terme.

J'utiliser un CustomValidator comme celui-ci dans la page ASP:

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

Et dans le code-behind je mettrais quelque chose comme ceci:

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); 
} 

Eh bien, en fait je voudrais Tirez la définition isValidPasswordText (string) dans une classe de couche de gestion, mais c'est plus une décision d'architecture.

+0

J'essaie presque toujours d'éviter la validation de ServerSide, mais merci. – madcolor

+0

Pourquoi diable? Vous devez effectuer la validation côté serveur en plus du côté client de toute façon. Si vous ne faites pas de validation côté serveur, vous ne validez pas les entrées pour l'essentiel. Le côté client est juste pour la commodité de l'utilisateur. – Tomas

+0

Suere vous pouvez vérifier, mais tous les problèmes devraient être pris en charge côté client d'abord. – madcolor

0

Je pense que si vous voulez juste utiliser le contrôle de validation pour valider la longueur et la chaîne vide, vous devriez user 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"); 
    } 
} 
Questions connexes