ASP 검증 문제 : regularexpressionvalidator를 사용하여 업로드 파일 파일 이름
-
20-09-2019 - |
문제
설정 파일에 허용하려는 모든 파일 유형의 행이 있습니다.
jpeg|jpg|tiff|tif|png|gif|bmp|eps|wmf|emf|pdf|doc|docx|zip|rar|ppt|pptx|mdb|xls
FileUpload 컨트롤 옆에 이러한 파일 만 허용하는 regularexpressionvalidator를 제어하고 싶습니다.
Regex Validator의 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 +")$";
}
}
다른 팁
클라이언트 측 유효성 검사를 끄고 서버 측 유효성 검사 만 사용하면 사용할 수있는 .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);
동적 변경 가능한 목록에 대해 파일을 검증하는 매우 효율적인 방법이어야합니다.
참고, 나는 그것을 만들었다 이것 온라인 Regex Builder, 놀라운 무료 도구!
Regex는 서버 측의 Regularexpressionvalidator에서 잘 작동합니다. 클라이언트 유효성 검사를 시도하면 문제가 발생합니다. JavaScript Regex Flavor가 "I"를 처리하는 방법을 모르기 때문에 실패합니다 ( "I"와 함께 JavaScript Regex에서 사례 무감각이 달성됩니다). 이 스크립트를 페이지에 추가 하여이 문제를 해결할 수 있습니다. 스크립트가 매우 간단하다고 생각합니다.
<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")
씨#:
var re = new Regex("(jpg)|(gif)", RegexOptions.IgnoreCase);
re.IsMatch("image.jpg")