web-dev-qa-db-ja.com

文字列のバックスラッシュをエスケープする-javascript

現在選択されているファイルの名前を(<input type="file">要素で)表示する必要があります。

すべて問題ありません。唯一の問題は、この種の文字列「C:\ fakepath\typog_rules.pdf」を取得することです(browsetはこれを入力要素の値として自動的に配置します)。

'\'または'\\'で文字列を分割しようとすると、スラッシュがエスケープされないため失敗します。スラッシュの一致/置換の試みも失敗します。これを回避する方法はありますか?少なくともOperaおよびIE(他のブラウザではFileReaderを使用できるため)

例えば。入力として「C:\ fakepath\typog_rules.pdf」を取得していますが、出力として「typog_rules.pdf」を取得したいです。

23
Max

セキュリティ上の理由から、_<input type="file" />_要素を介して参照されるファイルの実際のフルパスを取得することはできません。

この質問 は既に言及しており、このトピックに関する他のStack Overflowの質問へのリンクです。


以前の回答。タイトル、タグ、質問を通じてこのページにアクセスする将来の訪問者の参照として保持されます。
_string = string.split("\\");
_

JavaScriptでは、改行(_\n_)などの特殊文字をエスケープするためにバックスラッシュが使用されます。リテラルバックスラッシュを使用する場合は、二重バックスラッシュを使用する必要があります。

したがって、2つの円記号を一致させる場合は、4つの円記号を使用する必要があります。たとえば、alert("\\\\")は、2つのバックスラッシュを含むダイアログを表示します。

26
Rob W

これはあなたが探している答えに近いと思います:

<input type="file">

$file = $(file);
var filename = fileElement[0].files[0].name;
4
Himerzi

バックスラッシュ文字をエスケープします。

foo.split('\\')
3
Quentin

少しハックが効きます:

const input = '\text';
const output = JSON.stringify(input).replace(/((^")|("$))/g, "").trim();

console.log({ input, output });
// { input: '\text', output: '\\text' }
0
Ashley Williams

入力IDを要素に追加し、次のようなことを行います。

document.getElementById('inputId').value.split(/[\\$]/).pop()
0
Yifat Biezuner