2009-07-28 15 views
0

でUploadFileファイルの名前は、私ができるようにしたいすべてのファイルタイプの行をファイル:問題:私は設定を持っているRegularExpressionValidator

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 +")$"; 
    } 
} 

をしかし、それは大文字と小文字を区別します。 私の唯一の問題は、それを区別しないことです。

答えて

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 +")$"; 
    } 
} 
0

あなたは、クライアント側のvalidionのみ使用サーバー側の検証をオフにすると、そこの.NETサポートケースinsensitivteがあるoperatior(?I)を使用することができます。あなたは、クライアントとサーバー側の両方で動作しますsomethignをしたい場合は、ファイルの拡張子ごとに

のようなもの[JJ] [Ppは] [EE] [Ggを]

に頼る必要があるかもしれません。あなたの拡張機能のそれぞれのコードが含まれていなかった、パターンを外挿することは、かなり簡単なはず

+0

は説明してくださいyuoことができますこれらの2つのオプションの違いは? – Shimmy

+0

およびその使用方法 – Shimmy

+0

大文字小文字を区別しない演算子 - (i?)は.NET固有の演算子であり、標準正規表現構文の一部ではありません。クライアント側のバリデーターはJavaSciptを使用するため、この演算子はクライアント側では機能しません。サーバー側の検証のみを使用する場合は、クライアント側の検証を無効にして、演算子を使用してください。 第2のオプションは、各拡張用Capitor又はキャピトルまたは小文字が続くキャピトル又はキャピトルまたは小文字E続く小文字のpに続く小文字J Gブラケット[]の文字セットを定義する、というのがequivelantあります。 –

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

これは、と非常に効率的な方法でなければなりませんダイナミックに変更可能なリストに対してファイルを検証する

参考までに、私はthisのオンライン正規表現作成ツールを使用しました。

+0

だけでなく、クライアント側でその仕事をしていますか? –

+0

おお! 私はちょうどそれをテストし、それはしません! – Shimmy

+0

おっと!これは正規表現ですが、asp:RegularExpressionValidatorでは動作しません! この制御例正規表現は、小文字を区別しないようにする方法はありますか? – Shimmy

0

正規表現は、サーバー側のRegularExpressionValidatorで正常に動作します。この問題は、クライアントの検証を試みるときに起きます。なぜなら、javascriptの正規表現のフレーバーは "?i"(大文字小文字の区別はjavascriptの正規表現で "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> 
0

あなたは.NETで、この検証サーバサイドをやっている場合は、あなたが

VBのようなものを使用することができますが:

Dim re As New Regex("(jpg)|(gif)", RegexOptions.IgnoreCase) 
    re.IsMatch("image.jpg") 

のC#:

var re = new Regex("(jpg)|(gif)", RegexOptions.IgnoreCase); 
    re.IsMatch("image.jpg") 
+0

私は、ASP.NET RegularExpressionValidatorコントロールを検証する方法を探していました。 – Shimmy

関連する問題