2009-08-26 15 views
0

私は(6文字長いか何もない)の値を受け入れることを検討しています。.Net RegularExpressionValidatorヘルプ(空または6文字以上)?

これは更新用です。パスワードが入力された場合は、6文字を強制したいと思います。もしそうでなければ、フィールドを無視したい。

私は6文字の部分を取得するREGEXは、空を処理するための任意のヘルプもありますか?

<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

これはなに?誰かが昨日、非常によく似た質問をしましたが、asp.netに特化していませんでした。 –

+0

私はユーザーのグリッドビューを持っています.1列はテキストフィールド "パスワード"で、管理者にパスワードの上書きを入力するオプションが与えられています。 – madcolor

答えて

2

\

^(\w{6}|)$ 

にそれを短縮することができます。つまり、TextBox1が空の場合、Page.IsValidはtrueになります。

+0

+1 - これは正しいです。 TextBox1に値が含まれていない場合、検証は成功します。 – Keith

+0

+1 - しかし、あなたがコントロールで設定できるオプションです。空の入力を検証するようコントロールに指示できますが、無視するように指示することもできます。 –

+0

同じ結論を描かなければならなかった..ありがとう! – madcolor

1

考えられる解決策:

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

いずれに6文字、または空の、他には何も許可されません。

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

あなたはおそらくも、ワット手段「単語文字」私はあなたの質問の権利を得たが、RegularExpressionValidator空の入力を検証しない場合はわからない

+0

\ wはアンダースコアを受け入れます(OPがそれらを望んでいるかどうかわかりません)。 – CAbbott

0

これは正確にあなたが探している答えではありませんが、私は常に、サーバー側のメソッドOnValidateを使ってCustomValidatorにそのような検証を入れることができるかどうかを見ています。

正規表現は楽しく、困惑者にはぴったりですが、常にそれらを取得しておらず、あなたがしていることを理解しない人がいます。

特に、ソリューションを維持する人ではないことが予想される場合は、わかりやすく、わかりやすい側面で誤って試してください。

これはあまりにも冗長に見えるかもしれませんが、これは長期的には最も悲しみの少ない解決策の1つです。

私はASPページで次のようにのCustomValidatorを使用することになり

:実際に私は思います、

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

まあ:

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

そして、コードビハインド私はこのような何かを入れたいですisValidPasswordText(文字列)の定義をビジネス層のクラスに引き出しますが、これはアーキテクチャ上の決定です。

+0

私はほとんど常にServerSide検証を避けようとしますが、ありがとうございます。 – madcolor

+0

なぜ地球上?とにかくクライアント側に加えてサーバー側の検証も実行する必要があります。 サーバー側の検証を行わない場合は、本質的に入力を検証していません。クライアント側は、ユーザーの便宜のためだけのものです。 – Tomas

+0

あなたはもう一度チェックすることができますが、問題はクライアント側で最初に検出されるべきです。 – madcolor

0

長さと空の文字列を検証するための検証コントロールを使用したいと思うのであれば、ユーザー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"); 
    } 
} 
関連する問題