1

現時点ではまだ正規表現を学んでいますが、当分の間、誰かがこれを手伝ってくれませんか? 文字列をフォーマットするための特別な要件がいくつかあります。

  1. ディレクトリがありません。ファイル名だけ。
  2. ファイル名はすべて小文字にする必要があります。
  3. 空白はアンダースコアに置き換える必要があります。

難しいことではありませんが、時間に追われており、有効なファイル名を保証する「正しい」方法がわかりません(つまり、ファイル名として無効であるはずの文字を忘れてしまいました)。

4

3 に答える 3

3

お急ぎの場合は、通常、http://regexlib.com/のライブラリで使用できる正規表現を見つけることができます。編集して言う: これはあなたのために働くかもしれないものです

([0-9a-z_-]+[\.][0-9a-z_-]{1,3})$
于 2008-09-25T00:41:38.947 に答える
1

ユーザーから文字列パスを取得している場合(たとえば、ファイルアップロードフィールドの.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= '_'
于 2008-09-26T12:54:49.103 に答える
1

そして、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);
于 2008-09-29T02:02:05.450 に答える