6

入力の長さRegularExpressionValidatorを検証するために a を使用しようとしています。TextBox動作していますが、文字と数字しか受け付けません。任意の文字を許可したいのですが、唯一のチェックは 25 文字以下であることです。

<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"  />

正規表現は私の得意分野ではないので、英数字だけでなく任意の文字^[a-zA-Z0-9]{25}$を最大 25 回表すように変更する方法を教えてください。

注 1:RequiredFieldValidator 1 つ以上の文字を確保するための場所が既にあります。

注 2: TextBoxのプロパティを使用できることはわかってMaxLengthいますが、このフォームは既存のデータを編集するためのものでもあり、編集時に既存のレコードを単純に切り捨てることは望ましくありません。ユーザーが気付かないうちにフォームが切り捨てられるのではなく、既存のデータを編集するユーザーが値を短くする必要があることを明らかにするバリデーターを実装することをお勧めします。

注 3:クライアント側の検証のみに依存する限り、カスタム バリデータなどの代替ソリューションを受け入れます。サーバーでカスタム検証ハンドラーを作成するためのコード ビハインドにアクセスできません。

4

2 に答える 2

16
.{1,25} 

値を任意の文字に 1 ~ 25 回制限する必要があります。ただし、これがユニコード入力をどのように処理するかはわかりません-マルチバイト文字を単一の文字としてカウントする可能性があるため、これを使用してデータベースを制限する場合は注意してください

おそらくあなたが望むかもしれません^.{1,25}$が、この単純なバージョンでも動作するはずです

于 2012-06-29T14:34:52.400 に答える
4

カスタムバリデーターを使用する場合、次のようなことができます。

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

そして、あなたのjavascriptは次のようになります:

<script>     
    function ValidateFieldLegth(sender, args) {
        var v = document.getElementById('<%=MenuLabel.ClientID%>').value;
        if (v.length > 25) {
            args.IsValid = false;
        }
        else {
            args.IsValid = true;
        }
    }
</script>
于 2012-06-29T14:34:19.573 に答える