Problema asp validazione: i nomi di file UploadFile con RegularExpressionValidator
-
20-09-2019 - |
Domanda
Non ho nelle impostazioni di file di una fila di tutti i tipi di file che voglio permettere:
jpeg|jpg|tiff|tif|png|gif|bmp|eps|wmf|emf|pdf|doc|docx|zip|rar|ppt|pptx|mdb|xls
Io voglio avere accanto al FileUpload controllare un RegularExpressionValidator che consente solo di questi file.
sto gestirlo nel impostando la proprietà ValidationExpression del validatore regex evento PageLoad.
ho provato:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string regex = "jpeg|jpg|tiff"; //A huge list of filetypes.
upFiles_RegularExpressionValidator.ValidationExpression =
@"^.*\.(" + regex +")$";
}
}
Ma è case sensitive. Il mio unico problema ora è quello di rendere insensibile.
Soluzione
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 +")$";
}
}
Altri suggerimenti
Se si spegne validion lato client e utilizzare solo la validazione lato server, c'è un caso insensitivte supporto .NET operatior (? I) che può essere utilizzato. Se si vuole somethign che funziona sia lato client e server potrebbe essere necessario ricorrere a qualcosa di simile
[Jj] [PP] [ee] [Gg]
per ciascuna delle vostre estensioni dei file. Non includere il codice per ciascuna delle vostre estensioni, dovrebbe essere abbastanza facile estrapolare il modello
Risposta:
^.*\.(?i-s:pdf|exe)$
Il che significa:
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);
Questo dovrebbe essere un modo molto efficace per convalidare i file con un elenco mutevole dinamica
Cordiali saluti, ho fatto con questo costruttore regex online, un incredibile strumento gratuito!
L'espressione regolare funziona bene con il RegularExpressionValidator sul lato server. Il problema sorge quando si cerca di fare la convalida del client, che non riesce perché il sapore regex javascript non sa come gestire "? I" (caso insensibilità è realizzato in javascript regex con "i"). È possibile risolvere questo problema con l'aggiunta di questo script alle tue pagine. Penso che lo script è piuttosto semplice.
<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>
Se si sta facendo questo lato server di validazione con .NET, è possibile usare qualcosa come
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")