RegularExpressionValidatorとUploadFileファイル名:ASPの検証の問題
-
20-09-2019 - |
質問
設定は私ができるようにしたいすべてのファイルタイプの行をファイルに
私が持っています:
jpeg|jpg|tiff|tif|png|gif|bmp|eps|wmf|emf|pdf|doc|docx|zip|rar|ppt|pptx|mdb|xls
私はこれらのファイルのみを許可するRegularExpressionValidatorを制御するFileUploadの隣に持っていると思います。
私は、正規表現のバリデータの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 +")$";
}
}
しかし、それは大文字と小文字を区別します。 私の唯一の問題は、今では影響を受けないようにすることです。
解決
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 +")$";
}
}
他のヒント
あなたは、クライアント側validionをオフにしてのみ、サーバー側の検証を使用する場合は、
、.NETサポートケースinsensitivteありoperatior(?I)を使用することができます。あなたは、クライアントとサーバー側の両方で動作しますsomethignをしたい場合は、
のようなものに頼る必要があるかもしれません[JJ] [Ppを] [EE] [Ggを
あなたのファイル拡張子のそれぞれについて。あなたの拡張機能のそれぞれのコードが含まれていなかった、パターンを外挿することは、かなり簡単なはずです。
答:
^.*\.(?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);
これは、動的に変更リスト
に対してファイルを検証するには非常に効率的な方法でなければなりませんちなみに、私はこののオンライン正規表現ビルダー、素晴らしい無料のツールでそれを作った!
正規表現は、サーバー側でRegularExpressionValidatorで正常に動作します。問題は、それがJavaScriptの正規表現の風味が処理方法を知らないので、失敗したクライアント検証を行うことをしようとしたときに上昇し、「?私は」(ケース非感受性が「I」とjavascriptの正規表現で達成されます)。あなたのページにこのスクリプトを追加することで、この問題を解決することができます。私は、スクリプトはかなりまっすぐ進むと思います。
<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>
は、.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")
所属していません StackOverflow