我正在尝试验证该文件不会以.doc
结尾。
我想禁止上传文档和docx文件。
这个^.*(?<!doc|docx|DOC|DOCX).*$
似乎看起来是正确的,解释方面,但它没有通过..
即。应该允许test.jpg ... test.doc不应该......
等
答案 0 :(得分:3)
尝试删除最后的.*
:
^.*(?<!doc|docx|DOC|DOCX)$
虽然我建议做相反的事情。您可以构建一个匹配以.doc
,.docx
等结尾的文件的正则表达式,如果匹配,则表示它是无效文件。
此外,正如@krookedking所说,您必须包含\.
,否则它将不会与以doc
,docx
结尾的任何内容相匹配,...
答案 1 :(得分:2)
(?i).*\.docx?
您应该选择与此模式不匹配的那些。
答案 2 :(得分:0)
如果使用正则表达式,请使用ignore case。如果有人添加文件.doCx或.dOcX等怎么办?
您选择的语言可能有一些路径库,因此您可以完全避免使用正则表达式(我不知道在您的情况下是否可以这样做)
这是一个小C#示例:
static void Main(string[] args)
{
string correctFilename = "something.xlsx";
Debug.Assert(IsValidFile(correctFilename));
string wrongFilename = "something.docx";
Debug.Assert(!IsValidFile(wrongFilename));
string wrongFilename2 = "something.doc";
Debug.Assert(!IsValidFile(wrongFilename2));
}
static bool IsValidFile(string filename)
{
string ext = Path.GetExtension(filename).ToLower();
return ext != ".docx"
&& ext != ".doc";
}
答案 3 :(得分:0)
我的变化:
^.*(?<!\.(?i)docx?)$
'?'使x成为可选项,(?i)使其不区分大小写,因此它应与Doc和DocX匹配。
答案 4 :(得分:0)
你可以使用前瞻而不是后面的外观(Lookaround rules)如果以docx结尾,下面的前方将做你想要的事情。 (除非有.doc(x)文件名,如test.extraperiod.doc)
^.*\.(?!doc).*$
不区分大小写
^.*\.(?!(?i)doc).*$
此前瞻可以解决test.extraperiod.doc问题
^((?!\.(?i)docx?).)*$