C# 什么是pdf文件base64字符串的正则表达式?

C# 什么是pdf文件base64字符串的正则表达式?,c#,regex,C#,Regex,如果base64字符串是从pdf文件编码的,我需要验证它。字符串必须是: 以“JVBER”开头(用于验证Pdf mime类型) 匹配“^[a-zA-Z0-9+/]*={0,3}$”且字符串长度为4的倍数(以验证有效的base64字符串) 有人能帮我把这些条件合并成正则表达式吗 谢谢 public static bool HasPdfMimeType(string str) { if (!string.IsNullOrEmpty(str) && str

如果base64字符串是从pdf文件编码的,我需要验证它。字符串必须是:

  • 以“JVBER”开头(用于验证Pdf mime类型)
  • 匹配“^[a-zA-Z0-9+/]*={0,3}$”且字符串长度为4的倍数(以验证有效的base64字符串)
有人能帮我把这些条件合并成正则表达式吗

谢谢

 public static bool HasPdfMimeType(string str)
    {
        if (!string.IsNullOrEmpty(str) && str.Length > 4)
        {
            return str.StartsWith("JVBER");
        }
        return false;
    }

 public static bool IsBase64string(string str)
    {
        if (string.IsNullOrEmpty(str))return false;

        str = str.Trim();
        return (str.Length % 4 == 0) && Regex.IsMatch(str, @"^[a-zA-Z0-9\+/]*={0,3}$", RegexOptions.None);  
    }

当您有其他几个为其构建的库时,使用正则表达式断言字符串长度和字符串的开头有点不寻常,但如果您愿意这样做,这将起作用:

(?=^(?:.{4})*$)^JVBER[a-zA-Z0-9\+\/]*={0,3}$

让字符串精确到4的倍数是一个棘手的部分

细分
正则表达式的第一部分断言该字符串的长度是4的精确倍数。
通过制作一组四个字符,根据需要重复多次,并锚定
在字符串的开始和结束之间,正则表达式被迫只接受字符串
这是4的倍数。
(?=^(?:.{4})*$)
(?=)正向前瞻-在继续之前确保这是真的
^$在字符串的开头和结尾之间。。。
(?:)*…获得尽可能多的。。。
.{4}…尽可能精确地分组4个字符(任何字符都可以)。
第二部分断言字符串以JVBER开头(它是用Base64编码的%PDF),
然后声明后面有任意数量的合法Base64字符。终点允许在零和零之间
和三个等号表示填充。
^JVBER[a-zA-Z0-9\+\/]*={0,3}$
^$anchor位于字符串的开始和结束之间
JVBER按字面意思匹配“JVBER”
[a-zA-Z0-9\+\/]*根据需要匹配尽可能多的有效Base64字符
={0,3}0和3之间的匹配=符号
请注意,
+
/
符号是转义的。
如果您使用的是C#,您可能需要更改此项


也许本页对您为什么需要正则表达式有所帮助。只需使用string方法StartsWith(“JVBER”)。@jdweng,因为我需要验证有效的base64 string字符串,是字符串,是字符串。base 64字符串是一个字符串。您不需要正则表达式来检查字符串中的字符。请注意,PDF规范非常松散,并且允许头从前1024个字节的任何位置开始,因此对于许多真实的PDF文件,只需检查前几个字节就会返回false