Asp.net 验证asp:RegularExpressionValidator上载文件名时出现问题
设置文件中有一行我希望允许的所有文件类型:Asp.net 验证asp:RegularExpressionValidator上载文件名时出现问题,asp.net,regex,file-upload,case-insensitive,file-type,Asp.net,Regex,File Upload,Case Insensitive,File Type,设置文件中有一行我希望允许的所有文件类型: jpeg|jpg|tiff|tif|png|gif|bmp|eps|wmf|emf|pdf|doc|docx|zip|rar|ppt|pptx|mdb|xls 我想在FileUpload控件旁边有一个RegularExpressionValidator,它只允许这些文件 我在PageLoad事件中处理它,设置正则表达式验证器的ValidationExpression属性 我试过: protected void Page_Load(object sen
jpeg|jpg|tiff|tif|png|gif|bmp|eps|wmf|emf|pdf|doc|docx|zip|rar|ppt|pptx|mdb|xls
我想在FileUpload控件旁边有一个RegularExpressionValidator,它只允许这些文件
我在PageLoad事件中处理它,设置正则表达式验证器的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 +")$";
}
}
但它是区分大小写的。
我现在唯一的问题是使其不敏感。如果关闭客户端validion并仅使用服务器端验证,则可以使用.NET support case insensitive Operator?i。如果您想让客户端和服务器端都能工作,您可能需要求助于
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 +")$";
}
}
[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);
这应该是根据动态可变列表验证文件的一种非常有效的方法
仅供参考,我是通过在线regex builder制作的,这是一个了不起的免费工具 正则表达式可以与服务器端的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>
如果您使用.NET在服务器端执行此验证,则可以使用 VB: C:
哎哟我只是测试了一下,但是没有!哎哟它是有效的正则表达式,但在asp:RegularExpressionValidator中不起作用!有没有办法使这个控件的正则表达式不区分大小写?yuo能解释一下这两个选项之间的区别吗?不区分大小写的操作符-i?是特定于.NET的运算符,不是标准正则表达式语法的一部分。客户端验证器使用JavaScipt,因此该操作符不能在客户端工作。如果您同意只使用服务器端验证,则禁用客户端验证并使用运算符。第二个选项相当于说,对于每个扩展名,大写字母或小写字母j后跟大写字母或小写字母p后跟大写字母或小写字母e后跟大写字母或小写字母g,括号[]定义了一个字符集。括号中没有任何JS大小写。操作人员我不打算使用[Jj]etc.yes-/I-但由于语法不同于.NET等效语法,您需要为validator控件选择客户端或服务器端验证。如果两者都需要,则可能需要使用自定义验证器。我正在寻找一种使用ASP.NET RegularExpressionValidator控件进行验证的方法。
Dim re As New Regex("(jpg)|(gif)", RegexOptions.IgnoreCase)
re.IsMatch("image.jpg")
var re = new Regex("(jpg)|(gif)", RegexOptions.IgnoreCase);
re.IsMatch("image.jpg")