2016-02-28 84 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