Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用于检测base64编码字符串的正则表达式_Php_Regex_Base64 - Fatal编程技术网

Php 用于检测base64编码字符串的正则表达式

Php 用于检测base64编码字符串的正则表达式,php,regex,base64,Php,Regex,Base64,我需要在我的应用程序中检测格式为@base64(例如@vghpcybpcybhbblbmnvzgvkihn0cmluzw=)的字符串 @必须在开头,base64编码字符串的字符集是a-z,a-z,0-9,+,/和=。检测它们是否合适的常规表达 谢谢这样做应该可以(不检查长度是否合适!): 任何base64编码字符串的长度必须是4的倍数,因此需要额外的长度 请参见此处,了解检查正确长度的解决方案: 从链接答案快速解释正则表达式: ^@ #match "@" at beginning of str

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

@必须在开头,base64编码字符串的字符集是
a-z
a-z
0-9
+
/
=
。检测它们是否合适的常规表达


谢谢

这样做应该可以(不检查长度是否合适!):


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

请参见此处,了解检查正确长度的解决方案:

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

^@ #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
尝试:

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

=>

这里有一个可选的正则表达式:

^@(?=(.{4})*$)[A-Za-z0-9+/]*={0,2}$
它满足以下条件:

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

我忘了提到的是,base64编码字符串的末尾只有“=”个字符,最多只有2个。是否可以检查此项?^@(?[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$将是正确的?是和否,如果您对以@symbol开头的源代码有信心,那么是的,这应该足够好了。尽管我假设您正在尝试检测它,因为它可能不是有效的源,在这种情况下,甚至像@HeythismytweeterHandle这样的东西也可能被检测为base64。这些是你应该考虑的事情。如果你能控制通讯的两端,我会稍微调整一下。只需执行-if first char@然后if base64_解码($str,true)!=错误,然后进行base64_解码。不需要reg ex。好吧,如果您基本上只想检查字符集的正确性和一些基本的前缀/后缀检查,那么我的简短说明就足够了。不过,较长的那个也会检查长度是否合适。这将是一个很好的解决方案,问题是我试图从上下文中提取base64(例如,在用户提交的文本中间)。是的,@heythismytweeterhandle也会验证,但这对我来说不是问题,只要它有效(长度也合适)base64@PierrOz可能是从,但我还是很难过,看看发生了什么there@Federico-Quagliotto链接到Gumbo的答案,而不是明目张胆地窃取它,而不在应得的地方提供信用?不窃取,只是查看我有用的正则表达式的档案。我用base64做很多事情,仅此而已。我可以看到正则表达式是一样的,对不起,我以前没有检查过stackoverflow。@PierrOz:请看我的答案,以了解正则表达式的解释。@FedericoQuagliotto:很抱歉,我的指控。是第一个出现的结果,看起来像是公然偷窃。可能是
^@(?=(.{4})*$)[A-Za-z0-9+/]*={0,2}$