我想使用正则表达式来验证给定的文件夹名称,我尝试了一些测试,它工作正常,请让我知道如果我是完全安全的或我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