Problem Validieren asp: Uploaddateinamen mit RegularExpressionValidator
-
20-09-2019 - |
Frage
Ich habe in den Einstellungen eine Reihe aller Dateitypen-Datei ich zulassen mag:
jpeg|jpg|tiff|tif|png|gif|bmp|eps|wmf|emf|pdf|doc|docx|zip|rar|ppt|pptx|mdb|xls
Ich möchte neben dem Fileupload haben RegularExpressionValidator zu steuern, die nur diese Dateien ermöglicht.
Ich bin in der Pageload Ereignisbehandlung der Validation Eigenschaft des regex Validator Einstellung.
Ich habe versucht:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string regex = "jpeg|jpg|tiff"; //A huge list of filetypes.
upFiles_RegularExpressionValidator.ValidationExpression =
@"^.*\.(" + regex +")$";
}
}
Aber es ist Groß- und Kleinschreibung. Mein einziges Problem jetzt ist es unempfindlich zu machen.
Lösung
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 +")$";
}
}
Andere Tipps
Wenn Sie Client-Seite validion deaktivieren und nur serverseitige Validierung verwenden, gibt es eine .NET-Support-Fall insensitivte operatior (? I), die verwendet werden können. Wenn Sie somethign möchten, die sowohl Client- als auch Server-Seite funktioniert müssen Sie eventuell etwas greifen, wie
[Jj] [pp] [Ee] [Gg]
für jede Ihrer Dateierweiterungen. Haben Sie nicht Code für jede Ihrer Erweiterungen enthalten, sollte ziemlich einfach sein, um das Muster extrapolieren
Antwort:
^.*\.(?i-s:pdf|exe)$
Das heißt:
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);
Dies sollte eine sehr effiziente Möglichkeit, um Dateien gegen eine dynamische veränderbare Liste
ValidierenFYI, ich habe es mit diesem Online-regex-Builder, ein erstaunliches kostenloses Tool!
Die Regex funktioniert gut mit dem RegularExpressionValidator auf der Server-Seite. Das Problem steigt, wenn es versucht, die Client-Validierung zu tun, die fehlschlägt, weil die Javascript regex Geschmack nicht wissen, wie zu behandeln? „I“ (Groß- und Kleinschreibung ist in Javascript regex mit „i“ erreicht). Sie können durch das Hinzufügen dieses Skripts, um Ihre Seiten dieses Problem zu lösen. Ich denke, das Skript ziemlich geradlinig ist.
<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>
Wenn Sie diese Validierungsserver-Seite mit .NET tun, können Sie so etwas wie
verwendenVB:
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")