2017-08-24 17 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