2

ファイルアップロードコントロールで複数の検証を行う必要があります。私は今のところ次のコードを持っています:

<asp:Button id="btnUploadFile" class="ms-ButtonHeightWidth" runat="server"   OnClick="UploadFile_Click" Text="Upload File"></asp:Button>
<asp:RequiredFieldValidator ID="InputFileValidator" ControlToValidate="InputFile" Text="You must specify a value for the required field" runat="server" />

これを追加する必要があります^(?!..)(?!。..)(?=。 [^。] $)[^ \ "#%&:<>?\ / {|}〜] {1,128} $必須のフィールドバリデーターに加えて、ここから正規表現の検証を行います。これを行うにはどうすればよいですか?

4

1 に答える 1

3

アップデート:

代わりに正規表現を適応させて、ファイル名までのバックスラッシュを許可し、ファイル名でそれらを禁止することもできますが、そのような獣の複雑さは、それを構築するための時間と労力の価値がない可能性があります。

<asp:CustomValidator>元の正規表現は、ユーザーがファイル名を入力しているテキストボックスを検証するためのものであったため(名前がOSによって生成されるファイル入力ではない)、代わりにコントロールを使用して値を分割する方が適切だと思います。より\簡単に解析可能なチャンクを取得します。

このアプローチの主な利点は、その複雑な正規表現を複数のより単純な(そしてより簡単に理解できる)正規表現に分割し、ファイル名に対して一度に1つずつテストできることです。

    <script type="text/javascript">
        var validateFile = function validateFile(sender, args) {
            'use strict';
            var fileWithPath, //split on backslash
                fileName = fileWithPath[fileWithPath.length - 1], //grab the last element
                containsInvalidChars = /["#%&*:<>?\/{|}~]/g, //no reason to include \ as we split on that.
                containsSequentialDots = /[.][.]+/g, //literal .. or ... or .... (etc.)
                endsWithDot = /[.]$/g, // . at end of string
                startsWithDot = /^[.]/g, // . at start of string
                notValid = false, //boolean for flagging not valid
                valid = fileName.length > 0 && fileName.length <= 128;
            notValid = containsInvalidChars.test(fileName);
            notValid = notValid || containsSequentialDots.test(fileName);
            notValid = notValid || endsWithDot.test(fileName);
            notValid = notValid || startsWithDot.test(fileName);
            args.IsValid = valid && !notValid;
        };
    </script>
    <asp:FileUpload ID="InputFile" runat="server" />
    <asp:RequiredFieldValidator ID="rqfvInputFile" runat="server" ControlToValidate="InputFile" ErrorMessage="File is required"></asp:RequiredFieldValidator>
    <asp:CustomValidator ID="cstvInputFile" runat="server" ControlToValidate="InputFile" ClientValidationFunction="validateFile" ErrorMessage="File is not a sharepoint file"></asp:CustomValidator>
    <asp:Button ID="Button1" runat="server" Text="Button" />

上記の注意点の1つは、ファイル名のチャンクがで分割さ\れることです。これは、UnixまたはMacシステムのパス区切り文字ではない可能性があります。これらのクライアントでもこれを実行する必要がある場合は、どちら\/で分割する必要があるか、これで実行できるはずです。

var filePath = args.Value.split(/\\|\//g); //not tested.

オリジナル:

コントロールを追加し、プロパティをファイルアップローダーコントロールに<asp:RegularExpressionValidator>設定します。ControlToValidate

単一の入力に向けて、必要な数のバリデーターコントロールを設定できます。

適切なプロパティ(のなど)を設定ValidationExpression<asp:RegularExpressionValidator>ControlToValidateプロパティが検証する入力に向けられていることを確認してください。

例:

<asp:Button id="btnUploadFile" class="ms-ButtonHeightWidth" runat="server" OnClick="UploadFile_Click" Text="Upload File"></asp:Button>
<asp:RequiredFieldValidator runat="server" ID="RequiredInputFileValidator" ControlToValidate="InputFile" Text="You must specify a value for the required field" />
<asp:RegularExpressionValidator runat="server" ID="RegexInputFileValidator" ControlToValidate="InputFile" ErrorMessage="Only valid SharePoint files are allowed."
    ValidationExpression="^(?!..)(?!...)(?=.[^.]$)[^\"#%&:<>?\/{|}~]{1,128}$" />

検証グループを調べることもできます

于 2012-11-10T03:52:18.893 に答える