문자열이 유효한 파일 이름인지 확인하기 위해 사용해야하는 (JavaScript) 정규 표현식은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/130837

  •  02-07-2019
  •  | 
  •  

문제

나는 아직도 여전히 Regex를 배우고 있지만 한동안 누군가가 이것으로 나를 도울 수 있습니까? 문자열 서식을위한 몇 가지 특별한 요구 사항이 있습니다.

  1. 디렉토리가 없습니다. 파일 이름 만.
  2. 파일 이름은 모두 소문자 여야합니다.
  3. 공백은 밑줄로 교체해야합니다.

어렵지 않아야하지만 시간이 걸리지 않아야하며 유효한 파일 이름을 보장하는 '올바른'방법을 확신하지 못합니다 (즉, 파일 이름에 대해 유효하지 않은 문자를 잊어 버립니다).

도움이 되었습니까?

해결책

그리고 Regexp와 다른 JavaScript의 간단한 조합은 다음과 같습니다.

var a = "c:\\some\\path\\to\\a\\file\\with Whitespace.TXT";
a = a.replace(/^.*[\\\/]([^\\\/]*)$/i,"$1");
a = a.replace(/\s/g,"_");
a = a.toLowerCase();
alert(a);

다른 팁

당신이 슈퍼 Quick 서둘러 있다면, 당신은 일반적으로 도서관에서 허용 가능한 정규 표현을 찾을 수 있습니다. http://regexlib.com/. 말하기 편집 : 여기에 당신에게 효과가있는 것이 있습니다.

사용자로부터 문자열 경로를 가져 오는 경우 (예 : 파일 업로드 필드의 .Value를 읽음) 실제로 경로 분리기 문자가 무엇인지 확인할 수 없습니다. 백 슬래시 (Windows), 포워드 슬래시 (Linux, OS X, BSD 등) 또는 전적으로 오래되거나 모호한 OSS 일 수 있습니다. 전방 또는 백 슬래시에서 경로를 분할하면 일반적인 경우가 포함되지만, 잘못된 경우 사용자가 파일 이름을 무시할 수있는 기능을 포함시키는 것이 좋습니다.

'잘못된 문자'에 관해서는 이들도 운영 체제에 달려 있습니다. 아마도 가장 쉬운 경로는 모든 비 알파늄 성을 밑줄과 같은 자리 표시 자로 바꾸는 것입니다.

내가 사용하는 것은 다음과 같습니다.

var parts= path.split('\\');
parts= parts[parts.length-1].split('/');
var filename= parts[parts.length-1].toLowerCase();
filename= filename.replace(new RegExp('[^a-z0-9]+', 'g'), '_');
if (filename=='') filename= '_'

나는 그것을 확인하겠다 Regex Library.

당신은 당신의 요구에 맞게 다양한 수준의 견고성의 정규 표현을 선택할 수 있습니다.

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