2016-04-27 5 views
1

正規表現を作成して、ファイル名に無効な文字を除外したいとします。 Windowsでは無効な文字は/です:*?」<> |私が試した:QRegExpでバックスラッシュを除外しますか?

これはので、二重のバックスラッシュは私が何が起こったかを見るだろうと思って働いていなかったバックスラッシュとは別に、すべての文字のために働く
QRegExp("^[^\\/:*?\"<>|]*$") 

。単一のバックスラッシュを使用した場合、コンパイラの警告が表示されますが、コンパイラの警告が表示されます。警告:不明のエスケープシーケンス: '/'と問題は解決しませんでした。 QRegExpValidatorで使用する場合は円記号を使用しますか?

QDir :: rename()が無効な文字をチェックしていないため、無効な文字が入力された場合、ファイルにアクセスできなくなる可能性があるためです。ユーザーがこれを避けるための最善の解決策を入力できる文字を制限しているのですか、QDirは私が逃したメカニズムを提供していますか?

+1

C++は、 '' \\から単一のバックスラッシュを作成するので、4であることが必要です。 C++ 11には[生の文字列リテラル](http://en.cppreference.com/w/cpp/language/string_literal)もあります。 – LogicStuff

+0

ようこそバックスラッシュ地獄 –

答えて

4
QRegExp("^[^\\\\/:*?\"<>|]*$") 

またはC++ 11:

QRegExp(R"(^[^\\/:*?"<>|]*$)") 
+0

ありがとう、それは動作します。 – Assoluto

2

\\\\を使用する必要があると思います。 QRegExpのマニュアルの内容は次のとおりです。

注:C++コンパイラは、文字列のバックスラッシュを変換します。 \を正規表現に含めるには、\\など2回入力します。バックスラッシュ の文字自体と一致させるには、\\\\の4回を入力します。生の文字列と

のSe QRegExp

関連する問題