我是Golang的初学者。 我有一个从用户输入分配变量类型的问题。
当用户输入"2012BV352"
之类的数据时,我需要能够忽略BV
并将2012352
传递给我的下一个功能。
doc
中有一个包名gopkg.in/validator.v2
但它返回的是变量是否安全。
我需要切断不寻常的事情。
关于如何实现这一目标的任何想法?
答案 0 :(得分:2)
您可以编写自己的清理方法,如果它成为您经常使用的内容,我会将其打包并添加其他方法以涵盖更多用例。
我提供了两种不同的方法来实现相同的结果。一个被注释掉了。
我还没有运行任何基准测试,所以我无法告诉你哪些更高效,但如果你想弄明白的话,你可以编写自己的测试。它还将暴露Go的另一个重要方面,在我看来,它是一个更强大的工具......测试。
package main
import (
"fmt"
"log"
"regexp"
"strconv"
"strings"
)
// using a regex here which simply targets all digits and ignores everything else. I make it a global var and use MustCompile because the
// regex doesn't need to be created every time.
var extractInts = regexp.MustCompile(`\d+`)
func SanitizeStringToInt(input string) (int, error) {
m := extractInts.FindAllString(input, -1)
s := strings.Join(m, "")
return strconv.Atoi(s)
}
/*
// if you didn't want to use regex you could use a for loop
func SanitizeStringToInt(input string) (int, error) {
var s string
for _, r := range input {
if !unicode.IsLetter(r) {
s += string(r)
}
}
return strconv.Atoi(s)
}
*/
func main() {
a := "2012BV352"
n, err := SanitizeStringToInt(a)
if err != nil {
log.Fatal(err)
}
fmt.Println(n)
}