-3

以下代码并非一直有效。我看过无数的正则表达式示例,但很少有解决多个扩展名的使用。

public bool FAQPNFileCheck(string name)
{
    if (name.Length > 0)
    {

        Match match = Regex.Match(name, 
                                  @"\\([A-Za-z0-9_-]+)\.(jpg|doc|pdf)$", 
                                  RegexOptions.IgnoreCase);

        // Here we check the Match instance.
        if (match.Success)
        {
            // Finally, we get the Group value and display it.
            string key = match.Groups[1].Value;
            return true;
            //Console.WriteLine(key);
        }

    }
    if (name == "")
    {
        return true;
    }

    return false;
}
4

3 回答 3

1

如果您正在寻找这样的东西:this_is_not_a_picture.jpg.doc,正如安德烈所问的那样,您不允许.在正则表达式中使用文字点 ( ) 直到最后。

这应该这样做:

\\([A-Za-z0-9._-]+)\.(jpg|doc|pdf)$

于 2012-08-20T18:59:55.283 回答
0

尝试从RightToLeft

Regex r=new Regex(@"([A-Za-z0-9_-]+)\.(jpg|doc|pdf)$",RegexOptions.RightToLeft);
于 2012-08-20T19:06:11.890 回答
-1

好的,所以毕竟,您想允许带有jpgdocpdf扩展的文件,对吗?

让我们试试这个:

Regex.Match(name, @"^(?i:[A-Z0-9\_\-]+)\.(?i:jpg|doc|pdf)$", RegexOptions.Compiled);

正如latkin 所指出的,如果您打算使用该Regex对象一次,那么RegexOptions.Compiled这不是一个好的选择,因为实例化该对象需要更长的时间。但是,匹配会运行得更快,因此如果您要在多个文件上使用它(正如我所假设的那样),最好保留它,然后将其保留在一个Regex实例中。

于 2012-08-20T19:06:05.527 回答