2017-08-24 605 views
-1

我想验证base64字符串的开始,这是通过JavaScript发送到我的PHP脚本。正则表达式检查base64编码文件的开始

这是例如值:data:text/plain;base64,YQ==

所以我想验证字符串:

`- starts with "data:" 
- followed by any two words separated with/
- then there is ";" 
- and ends up with "base64,"` 
+0

这可能帮助:'/数据:\ w + \/\ w +; BASE64,/' –

+0

那好。但是应该有一条规则。用/分隔的右边的单词可以有任意数量的点,因此它可以像这样的数据格式化:image/vnd.adobe.photoshop; base64,也是 – jusep

+0

Voilà:'/data:\w+\/[\w.]+; base64,/' –

回答

0
preg_match("/data:\w+\/\w+;base64,.*/", "data:text/plain;base64,YQ==") == 1 ? print("base64") : print("don't know") 
+0

这很好。但是应该有一条规则。用/分隔的正确单词可以有任意数量的点,因此它的格式就像这样'data:image/vnd.adobe.photoshop; base64,也是' – jusep

+0

正确,更新正则表达式:'/data:\w+/.*; base64,。* /' –

1

的Fabian近了吧......

~^data:\w+/[\w\.-]+;base64,~

别不要使用斜线作为分隔符,这样你就不必逃离sl图案中的灰烬。

点必须被转义或者它会匹配任何东西。

\w确实包括_。如果您不想包含下划线,则可以使用[\da-zA-Z]

^要求匹配从字符串开始处开始。

根据您的反馈我已将连字符添加到第二和第三个字符类。连字符包含在字符类中时,它们必须首先列出或最后列出,以避免斜线转义。

这可能是更精确的是这样的:

~^data:[\da-zA-Z]+/[\da-zA-Z-]+(?:\.[\da-zA-Z-]+)*;base64,~

+0

这就像一个魅力。我刚刚添加了'^ data:\ w + \/[\ w \。\ - ] +; base64',所以它在第二个单词中也匹配“ - ”,因为像excel这样的文件的一些MIME类型在内部有斜杠。 – jusep