2016-02-28 185 views
2

我正在寫一個在golang中的web應用程序。我使用正則表達式來驗證URL。但是我無法驗證URL驗證中的圖像(abc.png)。正則表達式來驗證圖像

var validPath = regexp.MustCompile("^/$|/(home|about|badge)/(|[a-zA-Z0-9]+)$") 

以上URL將/home//about/但不能作出/abc.png。我的意思.本身不工作

我試過以下的正則表達式,但它並沒有幫助

var validPath = regexp.MustCompile("^/$|/(home|about|badge|.)/(|[a-zA-Z0-9]+)$") 
var validPath = regexp.MustCompile("^/$|/(home|about|badge)(/|.)(|[a-zA-Z0-9]+)$") 

,我試圖以匹配http://localhost:8080/badge.png

任何人都可以請幫我在這?

+0

你不允許任何地方的一個點。你可以把這個點放在字符類中。另外,我不確定最後一個管道相對於括號的位置。 –

+0

你的問題不清楚。請寫一些正則表達式必須匹配的例子。順便說一句,你爲什麼使用2「$」?字符串的結尾必須只出現一次。 – developer033

+0

@LarsFischer - 我更新了我試過的問題。但它沒有幫助 – Dany

回答

2

看來

^/$|^(?:/(home|about|badge))?/((?:badge|abc)\.png|[a-zA-Z0-9]*)$ 

應該爲你工作。請參閱regex demo

模式細分:

  • ^/$ - 一個/整個字符串
  • | - 或...
  • ^ - 字符串的開始
  • (?:/(home|about|badge))? - 可選序列/ +無論是homeaboutbadge
  • / - 一個/符號,後面用
  • ((?:badge|abc)\.png|[a-zA-Z0-9]*) - 第1個捕獲:
    • (?:badge|abc)\.png - badgeabc隨後與.png
    • | - 或...
    • [a-zA-Z0-9]* - 零個或多個字母數字
  • $ - 串

末這裏是Go playground demo

package main 

import "fmt" 
import "regexp" 

func main() { 
    //var validPath = regexp.MustCompile("^/((home|about)(/[a-zA-Z0-9]*)?|[a-zA-Z0-9]+\\.[a-z]+)?$") 
    var validPath = regexp.MustCompile(`^/$|^(?:/(home|about|badge))?/((?:badge|abc)\.png|[a-zA-Z0-9]*)$`) 

    fmt.Println(validPath.MatchString("/"), validPath.MatchString("/home/"), validPath.MatchString("/about/"), validPath.MatchString("/home/13jia0"), validPath.MatchString("/about/1jnmjan"), validPath.MatchString("/badge.png"), validPath.MatchString("/abc.png")) 
    fmt.Println(validPath.MatchString("/nope/"), validPath.MatchString("/invalid.png"), validPath.MatchString("/test/test")) 

    m := validPath.FindStringSubmatch("/about/global") 
    fmt.Println("validate() :: URL validation path m[1] : ", m[1]) 
    fmt.Println("validate() :: URL validation path m[2] : ", m[2]) 
    if m == nil || m[2] != "global" { 
     fmt.Println("Not valid") 
    } 
} 
1

你所尋找的是以下(基於關閉的例子您發佈路徑):

var validPath = regexp.MustCompile("^/((home|about)(/[a-zA-Z0-9]*)?|[a-zA-Z0-9]+\\.[a-z]+)?$") 

Playground with examples

+0

謝謝。它非常符合我的要求。但我也試圖將abc.png與batch.png一起匹配。我在你的goplay中嘗試了以下內容。但它不起作用。你能建議我該怎麼做? (^ |(home | about)(/?[a-zA-Z0-9] *)(| badge | abc)\\。png)?$「)'var validPath = regexp.MustCompile – Dany

+0

更新了我的答案以支持這一點。 – Howl

+0

(或者你是否只是特意支持** badge.png和abc.png,並不意味着允許任何其他圖片?) – Howl

0

您可以用下面的正則表達式驗證:

var validPath = regexp.MustCompile("^\/(home|about|badge)\/[a-zA-Z0-9]+[.][a-z]+$") 

詩:我製作了一個靈活的正則表達式,因此它接受很多格式的圖像:png,jpg,jpeg等等。

你可以在這裏進行測試:Regex