正则表达式:验证文件名不以.doc结尾

时间:2011-05-06 07:34:22

标签: regex validation

我正在尝试验证该文件不会以.doc结尾。

我想禁止上传文档和docx文件。

这个^.*(?<!doc|docx|DOC|DOCX).*$似乎看起来是正确的,解释方面,但它没有通过..

即。应该允许test.jpg ... test.doc不应该......

5 个答案:

答案 0 :(得分:3)

尝试删除最后的.*

^.*(?<!doc|docx|DOC|DOCX)$

虽然我建议做相反的事情。您可以构建一个匹配以.doc.docx等结尾的文件的正则表达式,如果匹配,则表示它是无效文件。

此外,正如@krookedking所说,您必须包含\.,否则它将不会与以docdocx结尾的任何内容相匹配,...

答案 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?).)*$