我想使用正則表達式來驗證給定的文件夾名稱,我嘗試了一些測試,它工作正常,請讓我知道如果我是完全安全的或我reg表達式錯過東西:有效的文件夾名稱正則表達式C++(windows)
QRegExp regExp("^([a-zA-Z])(([a-zA-Z_\-\s0-9\.\)\(])([^\\[email protected]#$%^&/:*?<>""|]*))*$");
QStringList ForbidenNameU;
ForbidenNameU<<"CON"<<"PRN"<<"AUX"<<"NUL"<<"COM"<<"COM1"<<"COM2"<<"COM3"<<"COM4"<<"COM5"<<"COM6"<<"COM7"<<"COM8"<<"COM9"<<"LPT"<<"LPT1"<<"LPT2"<<"LPT3"<<"LPT4"<<"LPT5"<<"LPT6"<<"LPT7"<<"LPT8"<<"LPT9";
QStringList ForbidenName;
ForbidenName<<"con"<<"prn"<<"aux"<<"nul"<<"com"<<"com1"<<"com2"<<"com3"<<"com4"<<"com5"<<"com6"<<"com7"<<"com8"<<"com9"<<"lpt"<<"lpt1"<<"lpt2"<<"lpt3"<<"lpt4"<<"lpt5"<<"lpt6"<<"lpt7"<<"lpt8"<<"lpt9";
if((Dirname->text().contains(regExp))&& !ForbidenNameU.contains(Dirname->text())&& !ForbidenName.contains(Dirname->text()))
{
validname=true;
qDebug()<<"match in dir name = "<<regExp.cap(0);
emit completeChanged();
}...
PS(我不想用GetInvalidFileNameChars()
或任何其他API)
預先感謝您。
哪個平臺? – Andrey
你忘記了混合大小寫的名字;而在UNC路徑中,所有這些名稱實際上並未被禁止。但是總的來說,IMO這些檢查是無用的複雜功能 - 只是嘗試創建/打開/ ...目錄並準備好處理故障(因爲IO總是可能會失敗)。 –
[在Windows下如何檢查給定字符串是否合法(允許)文件名?](http://stackoverflow.com/questions/62771/how-check-if-given-string-is-legal-allowed-文件名下的窗口) – Andrey