我在设置文件中有一行我想要允许的所有文件类型:
jpeg|jpg|tiff|tif|png|gif|bmp|eps|wmf|emf|pdf|doc|docx|zip|rar|ppt|pptx|mdb|xls
我希望FileUpload控件旁边有一个只允许这些文件的RegularExpressionValidator。
我在PageLoad事件中设置regex验证器的ValidationExpression属性。
我试过了:
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 :(得分: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 +")$";
}
}
答案 1 :(得分:0)
如果关闭客户端验证并仅使用服务器端验证,则可以使用.NET支持案例insensitivte operatior(?i)。如果你想要一些同时适用于客户端和服务器端的东西,你可能需要诉诸类似
的东西[Jj] [Pp] [Ee] [Gg]
每个文件扩展名。没有包含每个扩展程序的代码,应该很容易推断出模式
答案 2 :(得分: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在线正则表达式构建器,这是一个了不起的免费工具!
答案 3 :(得分: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>
答案 4 :(得分: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")