我正在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
有人可以帮我解决这个问题吗?
答案 0 :(得分:2)
看来
^/$|^(?:/(home|about|badge))?/((?:badge|abc)\.png|[a-zA-Z0-9]*)$
应该适合你。请参阅regex demo。
模式细分:
^/$
- /
整个字符串|
- 或...... ^
- 字符串开头(?:/(home|about|badge))?
- /
+ home
或about
或badge
/
- 后面跟着/
符号((?:badge|abc)\.png|[a-zA-Z0-9]*)
- 第1组捕获:
(?:badge|abc)\.png
- badge
或abc
后跟.png
|
- 或...... [a-zA-Z0-9]*
- 零个或多个字母数字$
- 字符串结尾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]+)?$")
答案 2 :(得分:0)
您可以使用以下Regex进行验证:
var validPath = regexp.MustCompile("^\/(home|about|badge)\/[a-zA-Z0-9]+[.][a-z]+$")
Ps:我制作了一个灵活的Regex,因此它接受了很多格式的图片:png
,jpg
,jpeg
等等。
您可以在此处进行测试:Regex