2012-06-29 12 views
5

RegularExpressionValidatorを使用してTextBox入力の長さを検証しようとしています。私はそれが働いているが、それは文字と数字だけを受け入れる。 にはの文字を使用できます(唯一のチェックは25文字以内です)。RegularExpressionValidatorで文字の種類に制限のない入力長を制限する

<asp:TextBox ID="MenuLabel" runat="server" /> 
<asp:RegularExpressionValidator ValidationExpression="^[a-zA-Z0-9]{25}$" ID="MenuLabelVal" runat="server" ErrorMessage="Menu Label must be no longer than 25 characters." ControlToValidate="MenuLabel" /> 

正規表現は、私の強いスーツではありませんので、私は任意の文字最大25倍だけではなく、英数字を表現するために^[a-zA-Z0-9]{25}$を変更する方法を誰かが私に言うことができます。

注1:私はすでにRequiredFieldValidatorを1文字以上確保しています。

注2:私はちょうどテキストボックスにMaxLengthプロパティを使用することができます知っているが、しかし、この形式は、既存のデータを編集するためにもある、と私は編集しているとき、それは単に既存のレコードを切り捨てる必要はありません。私は、ユーザーが気づかずにフォームを切り捨てるのではなく、値を短くする必要がある既存のデータを編集するユーザーにとって明白なバリデーターを実装したいと考えています。

注3:クライアント側の検証にのみ依存する限り、カスタムバリデータなどの代替ソリューションが公開されています。私はコードビハインドにアクセスしてサーバー上にカスタムの検証ハンドラを書くことはできません。

答えて

14
.{1,25} 

<asp:CustomValidator ID="MenuLabelVal" runat="server" ClientValidationFunction="ValidateFieldLegth" ErrorMessage="Menu Label must be no longer than 25 characters." ControlToValidate="MenuLabel" EnableClientScript="true" /> 

をそして、あなたのjavascriptがこのようなものになるだろう任意のチャー1〜25回。これはUnicode入力をどのように扱うかわかりません - マルチバイト文字を単一の文字としてカウントするかもしれませんので、データベースを制限するためにこれを使用している場合は注意してください。

^.{1,25}$おそらく、単純なバージョンが動作するはずです

+0

ありがとう私はそれを試してみましょう。現在のフォームには検証がありません。テキストボックスにMaxLengthを125に設定するだけです。少なくともそれにはハートの制限があります。 –

+0

2番目のバージョンはもっと速くなければなりません – abatishchev

+0

私は '。{25}'と '^。{25} $'の両方を試しました。どちらも0または25文字で有効です。 1〜24は無効として検証されます。それは '^。{1,25}'でしょうか? –

4

カスタムバリデータを使用する場合は、あなたがこのような何か行うことができます:に値を制限する必要があります

<script>  
    function ValidateFieldLegth(sender, args) { 
     var v = document.getElementById('<%=MenuLabel.ClientID%>').value; 
     if (v.length > 25) { 
      args.IsValid = false; 
     } 
     else { 
      args.IsValid = true; 
     } 
    } 
</script> 
+0

このソリューションをありがとう。実際にはうまくいきますが、マークアップの観点からは、余分なスクリプトを導入するよりも簡単なので、正規表現の手法を採用することにしました。とにかくそれを完全に有効なアプローチとして+1しました。 –

関連する問題