문제

나는 브라우저에 의해 정기적 인 표현이 해석 될 방식에 큰 차이가 있어야한다는 것을 점점 인식하고있다.
예를 들어, 동료는이 정규 표현식을 작성하여 업로드되는 파일에 PDF 확장 기능이 있음을 확인했습니다.

^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(.pdf)$

이것은 Internet Explorer와 Google Chrome에서 작동하지만 Firefox에서는 작동하지 않습니다. 실제 PDF조차도 테스트는 항상 실패합니다. 그래서 나는 여분의 물건이 관련이 없다고 결정하고 다음과 같이 단순화했습니다.

^.+\.pdf$

그리고 이제는 Firefox에서 잘 작동하며 IE 및 Chrome에서 계속 작동합니다.
ASP : ASP.NET의 FILEUPLOAD 및 RegulArexpressionValidator 컨트롤에 특화된 것입니까, 아니면 다른 방식으로 REGEX를 지원하는 다른 브라우저 때문입니까? 어느 쪽이든, 당신이 만난 후자는 무엇입니까?

도움이 되었습니까?

해결책

내가 아는 한 Firefox는 업로드의 전체 경로를 가질 수 없습니다. 이 경우 정규 표현의 해석은 관련이없는 것 같습니다. 정규 표현 실행에서 현대식 브라우저 사이의 차이는 아직 보지 못했습니다.

다른 팁

실제 질문과 관련하여 : 원래 Regex는 드라이브 문자 또는 UNC 장치 이름으로 시작하기 위해 값이 필요합니다. Firefox가 단순히 파일 이름에 포함시키지 않을 가능성이 상당합니다. 또한 크로스 플랫폼이라는 의도가있는 경우 브라우저에 관계없이 드라이브 문자 나 UNC 경로를 사용하지 않으므로 브라우저에 관계없이 비 독사 시스템에서 해당 리그가 실패 할 것입니다. 단순화 된 Regex ( ".pdf로 끝나는 한"는 무엇이든 수락)는 당신이 얻을만큼 파일 이름 점검의 좋은 것입니다.

하지만, 원래 질문에 대한 Jonathan의 의견은 과도하게 강조 될 수 없습니다. 절대로, 항상 내용을 결정하는 적절한 수단으로 파일 이름을 신뢰하십시오. 또는 그 문제에 대한 마임 유형. 웹 서버 (브라우저가 아닐 수도 있음)와 대화하는 클라이언트 소프트웨어는 무엇이든 거짓말을 할 수 있으며 확인하지 않으면 알 수 없습니다. 이 경우 수신 된 파일을 PDF 형식을 이해하는 일부 코드로 공급하고 해당 코드가 있으면 유효한 PDF인지 여부를 알려줍니다. 파일 이름을 확인하면 사람들이 명백히 잘못된 파일을 제출하려고하는 것을 방지 할 수 있지만 수신 된 파일에 대한 충분한 테스트는 아닙니다.

(추가 검증의 필요성에 대해 알고 있을지 모르지만 비슷한 상황이 있고 귀하의 질문을 찾는 다음 사람은 그렇지 않을 수 있습니다.)

JavaScript를 사용하는 경우 REGEX를 슬래시와 동봉하지 않으면 Firefox에서 오류가 발생합니다.

시도해보십시오 var regex = /^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(.pdf)$/;

Dave가 언급했듯이 Firefox는 경로를 제공하지 않고 파일 이름 만 제공합니다. 또한 그가 언급했듯이 운영 체제 간의 차이를 설명하지 않습니다. 당신이 할 수있는 가장 좋은 점검은 파일 이름이 PDF로 끝나는 지 확인하는 것입니다. 또한 파일 이름이 PDF로 끝나는 유효한 PDF임을 확인하지는 않습니다. 귀하의 요구에 따라 콘텐츠를 확인하여 실제로 PDF인지 확인할 수 있습니다.

패턴 구문과 관련하여 브라우저간에 차이가 없음을 알지 못했습니다. 그러나 C#의 구현이 다시 참조를 허용하고 JavaScript의 구현이 그렇지 않기 때문에 C#과 JavaScript의 차이를 발견했습니다.

JavaScript RES가 ECMA 표준에 의해 정의되어 있다고 생각하며 JS 통역사간에 많은 차이가 있는지 의심 스럽습니다. 나는 내 프로그램에서, 또는 기사에서 언급 한 것을 찾지 못했습니다.

ASP를 던지기 때문에 메시지는 실제로 약간 혼란 스럽습니다. 서버 측 기술 또는 생성 된 코드에 대해 이야기 할 때 브라우저의 결함이라고 결론을 내리는 방법은 모르겠습니다. 실제로, 우리는 당신이 브라우저에서 JS에 대해 이야기하고 있는지, 업로드 필드의 유효성 검사 (최소한 FF3와 함께 더 이상 간단한 방식으로 할 수 없음) 또는 서버 측 (FF 나 Opera가 아닙니다. Safari는 업로드 된 파일의 전체 경로를 업로드하지 않습니다. Chrome이 IE를 좋아한다는 사실에 놀랐습니다 ...).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top