正则表达式验证图像

时间:2016-02-28 20:25:03

标签: regex image validation go

我正在golang中编写一个Web应用程序。我正在使用正则表达式来验证URL。但我无法在URL验证中验证图像(abc.png)。

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

以上网址为/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

有人可以帮我解决这个问题吗?

3 个答案:

答案 0 :(得分: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 :(得分:1)

您正在寻找以下内容(基于您发布的示例路径):

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

Playground with examples

答案 2 :(得分:0)

您可以使用以下Regex进行验证:

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

Ps:我制作了一个灵活的Regex,因此它接受了很多格式的图片:pngjpgjpeg等等。

您可以在此处进行测试:Regex