英文:
Regular expression to validate image
问题
我正在使用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
请问有人可以帮助我吗?
英文:
I am writing a web application in golang. I am using regular expression to validate the URL. But I am not able to validate image (abc.png) in the URL validation.
var validPath = regexp.MustCompile("^/$|/(home|about|badge)/(|[a-zA-Z0-9]+)$")
The above URL takes /home/
, /about/
but could not make for /abc.png
. I mean .
itself not working
I tried the following regex, but it didn't help
var validPath = regexp.MustCompile("^/$|/(home|about|badge|.)/(|[a-zA-Z0-9]+)$")
var validPath = regexp.MustCompile("^/$|/(home|about|badge)(/|.)(|[a-zA-Z0-9]+)$")
And I am trying to match http://localhost:8080/badge.png
Could anyone please help me on this?
答案1
得分: 2
看起来这个正则表达式应该适合你的需求。具体的解释如下:
^/$
- 整个字符串只包含一个/
|
- 或者...^
- 字符串的开头(?:/(home|about|badge))?
- 可选的序列,包括/
,后面跟着home
、about
或者badge
/
- 一个/
符号,后面跟着((?:badge|abc)\.png|[a-zA-Z0-9]*)
- 第一组捕获:(?:badge|abc)\.png
-badge
或者abc
,后面跟着.png
|
- 或者...[a-zA-Z0-9]*
- 零个或多个字母数字字符
$
- 字符串的结尾
这是一个 Go 语言的示例代码,你可以在 Go playground demo 中查看。
package main
import "fmt"
import "regexp"
func main() {
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")
}
}
你可以在 regex demo 中查看该正则表达式的效果。
英文:
It appears
^/$|^(?:/(home|about|badge))?/((?:badge|abc)\.png|[a-zA-Z0-9]*)$
should work for you. See the regex demo.
The pattern breakdown:
^/$
- a/
as a whole string|
- or...^
- start of string(?:/(home|about|badge))?
- optional sequence of/
+ eitherhome
, orabout
orbadge
/
- a/
symbol followed with((?:badge|abc)\.png|[a-zA-Z0-9]*)
- Group 1 capturing:(?:badge|abc)\.png
-badge
orabc
followed with.png
|
- or...[a-zA-Z0-9]*
- zero or more alphanumerics
$
- end of string
And here is the 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")
}
}
答案2
得分: 1
你要找的是以下内容(基于你发布的示例路径):
var validPath = regexp.MustCompile("^/((home|about)(/[a-zA-Z0-9]*)?|[a-zA-Z0-9]+\\.[a-z]+)?$")
英文:
What you are looking for is the following (based off the example paths you posted):
var validPath = regexp.MustCompile("^/((home|about)(/[a-zA-Z0-9]*)?|[a-zA-Z0-9]+\\.[a-z]+)?$")
答案3
得分: 0
你可以使用以下正则表达式进行验证:
var validPath = regexp.MustCompile("^\/(home|about|badge)\/[a-zA-Z0-9]+[.][a-z]+$")
提示:我制作了一个灵活的正则表达式,因此它可以接受许多图像格式,如png
、jpg
、jpeg
等。
你可以在这里进行测试:正则表达式
英文:
You can validate with the following Regex:
var validPath = regexp.MustCompile("^\/(home|about|badge)\/[a-zA-Z0-9]+[.][a-z]+$")
Ps: I made a flexible Regex, so it accepts a lot of formats of images: png
, jpg
, jpeg
and so on..
You can test it here: Regex
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论