首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >go提供变量清理功能吗?

go提供变量清理功能吗?
EN

Stack Overflow用户
提问于 2017-12-30 09:25:28
回答 1查看 669关注 0票数 1

我是个刚开始学英语的人。我在从用户输入中分配变量类型时遇到了问题。

当用户输入像"2012BV352"这样的数据时,我需要能够忽略BV并将2012352传递给我的下一个函数。

文档中有一个包名为gopkg.in/validator.v2

但它返回的是变量是否安全。

我需要去掉那些不寻常的东西。

有关于如何实现这一点的想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-30 12:06:36

您可以编写自己的清理方法,如果您将更频繁地使用它,我会将其打包并添加其他方法,以涵盖更多的用例。

我提供了两种不同的方法来实现相同的结果。其中一个被注释掉了。

我没有运行任何基准测试,所以我不能确定哪个性能更好,但如果你想弄清楚,你可以写你自己的测试。它还暴露了Go的另一个重要方面,在我看来,它是一个更强大的工具……测试。

代码语言:javascript
复制
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)
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48030118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档