0

設定ファイルには、許可するすべてのファイル タイプの行があります。

jpeg|jpg|tiff|tif|png|gif|bmp|eps|wmf|emf|pdf|doc|docx|zip|rar|ppt|pptx|mdb|xls

FileUpload コントロールの横に、これらのファイルのみを許可する RegularExpressionValidator を配置したいと考えています。

正規表現バリデーターの ValidationExpression プロパティを設定する PageLoad イベントで処理しています。

私は試した:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        string regex = "jpeg|jpg|tiff"; //A huge list of filetypes.
        upFiles_RegularExpressionValidator.ValidationExpression = 
            @"^.*\.(" + regex +")$";
    }
}

しかし、大文字と小文字が区別されます。私の唯一の問題は、それを鈍感にすることです。

4

5 に答える 5

0

クライアント側の検証をオフにして、サーバー側の検証のみを使用する場合、使用できる .NET サポート ケース インセンシティブ オペレーター (?i) があります。クライアント側とサーバー側の両方で機能するものが必要な場合は、次のような手段に頼る必要があるかもしれません

[Jj][Pp][Ee][Gg]

ファイル拡張子ごとに。各拡張機能のコードが含まれていないため、パターンを推定するのは非常に簡単なはずです

于 2009-07-28T18:25:40.460 に答える
0

答え:

^.*\.(?i-s:pdf|exe)$

つまり:

ValidationExpression = @"^.*\.(?i-s:pdf|exe)$"; //will match pdf PDF exe EXE

string regex = "jpeg|jpg|tiff|tif|png|gif|bmp|eps";
ValidationExpression = @"^.*\.(?i-s:file_types)$".Replace("file_types", regex);

これは、動的な変更可能なリストに対してファイルを検証するための非常に効率的な方法です。

参考までに、素晴らしい無料ツールであるこのオンライン正規表現ビルダーで作成しました!

于 2009-07-28T18:26:00.023 に答える
0

正規表現は、サーバー側の RegularExpressionValidator で正常に機能します。クライアントの検証を行おうとすると問題が発生します。これは、javascript 正規表現フレーバーが "?i" の処理方法を認識していないために失敗します (javascript regex では "i" を使用すると大文字と小文字が区別されません)。このスクリプトをページに追加することで、この問題を解決できます。スクリプトはかなり簡単だと思います。

   <script type="text/javascript" language="javascript"> 
        function RegularExpressionValidatorEvaluateIsValid(val) 
        { 
          var value = ValidatorGetValue(val.controltovalidate); 
          if (ValidatorTrim(value).length == 0) 
            return true; 

          var regex = null; 
          if(val.validationexpression.indexOf("(?i)")>=0) 
          { 
             regex = new RegExp(val.validationexpression.replace("(?i)",""),"i"); 
          } 
          else 
          { 
             regex = new RegExp(val.validationexpression); 
          } 

          var matches = regex.exec(value);

          return (matches != null && value == matches[0]); 
        } 
   </script>
于 2009-07-29T09:30:24.990 に答える
0
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        string regex = "([jJ][pP][eE][gG])|([jJ][pP][gG])|([tT][iI][fF][fF])"; //A huge list of filetypes.
        upFiles_RegularExpressionValidator.ValidationExpression = 
            @"^.*\.(" + regex +")$";
    }
}
于 2009-07-28T18:21:38.143 に答える