【发布时间】:2012-10-18 19:38:37
【问题描述】:
我正在尝试使用正则表达式验证给定的文件夹名称,我尝试了一些测试并且效果很好,如果我完全安全或我的 reg 表达式遗漏了什么,请告诉我:
QRegExp regExp("^( [a-zA-Z] )( ( [a-zA-Z_\-\s0-9\.\)\(] )( [^\\!@#$%^&/:*?<>""|]* ) )*$" );
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)
提前谢谢你。
【问题讨论】:
-
您忘记了大小写混合的名称;在 UNC 路径中,所有这些名称实际上并没有被禁止。但总的来说,IMO 这些检查是一个无用的复杂性 - 只需尝试创建/打开/...目录并准备好处理故障(因为您已经应该这样做,因为 IO 总是会失败)。
-
@Andrey Windows,正在测试给定的文件夹基本名称以便稍后创建它,那么有没有比尝试打开它并处理失败更安全的解决方案?