用于检测base64编码字符串的RegEx

时间:2011-11-12 17:07:24

标签: php regex base64

我需要在我的应用程序中检测格式为 @ base64 的字符串(例如@VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw==)。

@必须位于开头,base64编码字符串的字符集为a-zA-Z0-9+/和{ {1}}。是适当的常规表现来检测它们吗?

由于

3 个答案:

答案 0 :(得分:10)

这样的事情应该做(不检查适当的长度!):

^@[a-zA-Z0-9+/]+={0,2}$

任何base64编码的字符串的长度必须是4的倍数,因此是额外的。

请参阅此处查看检查正确长度的解决方案:RegEx to parse or validate Base64 data

从链接答案快速解释正则表达式:

^@ #match "@" at beginning of string
(?:[A-Za-z0-9+/]{4})* #match any number of 4-letter blocks of the base64 char set
(?:
    [A-Za-z0-9+/]{2}== #match 2-letter block of the base64 char set followed by "==", together forming a 4-letter block
| # or
    [A-Za-z0-9+/]{3}= #match 3-letter block of the base64 char set followed by "=", together forming a 4-letter block
)?
$ #match end of string

答案 1 :(得分:4)

尝试:

^@(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$

=> RegEx to parse or validate Base64 data

答案 2 :(得分:0)

这是一个替代的正则表达式:

^@(?=(.{4})*$)[A-Za-z0-9+/]*={0,2}$

满足以下条件:

  • @符号后的字符串长度必须是四的倍数-(?=^(.{4})*$)
  • 内容必须为字母数字字符或+或/-[A-Za-z0-9+/]*
  • 结尾处最多可以有两个填充(=)字符-={0,2}