現時点ではまだ正規表現を学んでいますが、当分の間、誰かがこれを手伝ってくれませんか? 文字列をフォーマットするための特別な要件がいくつかあります。
- ディレクトリがありません。ファイル名だけ。
- ファイル名はすべて小文字にする必要があります。
- 空白はアンダースコアに置き換える必要があります。
難しいことではありませんが、時間に追われており、有効なファイル名を保証する「正しい」方法がわかりません(つまり、ファイル名として無効であるはずの文字を忘れてしまいました)。
現時点ではまだ正規表現を学んでいますが、当分の間、誰かがこれを手伝ってくれませんか? 文字列をフォーマットするための特別な要件がいくつかあります。
難しいことではありませんが、時間に追われており、有効なファイル名を保証する「正しい」方法がわかりません(つまり、ファイル名として無効であるはずの文字を忘れてしまいました)。
お急ぎの場合は、通常、http://regexlib.com/のライブラリで使用できる正規表現を見つけることができます。編集して言う: これはあなたのために働くかもしれないものです:
([0-9a-z_-]+[\.][0-9a-z_-]{1,3})$
ユーザーから文字列パスを取得している場合(たとえば、ファイルアップロードフィールドの.valueを読み取ることによって)、パス区切り文字が何であるかを実際に確認することはできません。これは、バックスラッシュ(Windows)、フォワードスラッシュ(Linux、OS X、BSDなど)、または完全に古いOSまたはあいまいなOS上の他の何かである可能性があります。パスを円記号または円記号で分割すると、一般的なケースがカバーされますが、推測が間違っている場合に備えて、ユーザーがファイル名を上書きできるようにすることをお勧めします。
「無効な文字」に関しては、これらもオペレーティングシステムによって異なります。おそらく最も簡単な方法は、英数字以外のすべてをアンダースコアなどのプレースホルダーに置き換えることです。
これが私が使用するものです:
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= '_'
そして、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);