【问题标题】:How to check if there is a special character in string or if a character is a special character in GoLang如何检查字符串中是否有特殊字符或字符是否是 GoLang 中的特殊字符
【发布时间】:2015-11-04 20:46:46
【问题描述】:

从输入中读取一个字符串后,我需要检查其中是否有特殊字符

【问题讨论】:

  • 您能否详细说明一下 golang 中的特殊字符是什么意思?
  • 这样的字符:'/'、'-'、'|' ,'&'

标签: string go special-characters


【解决方案1】:

您可以使用strings.ContainsAny 来查看符文是否存在:

package main

import (
  "fmt"
  "strings"
)

func main() {
  fmt.Println(strings.ContainsAny("Hello World", ",|"))
  fmt.Println(strings.ContainsAny("Hello, World", ",|"))
  fmt.Println(strings.ContainsAny("Hello|World", ",|"))
}

或者如果要检查是否只有ASCII字符,可以使用strings.IndexFunc:

package main

import (
    "fmt"
    "strings"
)

func main() {
    f := func(r rune) bool {
        return r < 'A' || r > 'z'
    }
    if strings.IndexFunc("HelloWorld", f) != -1 {
        fmt.Println("Found special char")
    }
    if strings.IndexFunc("Hello World", f) != -1 {
        fmt.Println("Found special char")
    }
}

【讨论】:

  • 我最终检查了所有不是 ABC...Z 谢谢!
【解决方案2】:

根据您对特殊字符的定义,最简单的解决方案可能是在您的字符串上执行for range 循环(产生符文而不是字节),并为每个符文检查它是否是在您的允许/禁止符文列表中。

有关字符串、字节和符文之间关系的更多信息,请参阅Strings, bytes, runes and characters in Go。

Playground example

【讨论】:

【解决方案3】:

你想使用 unicode 包,它有一个很好的符号检查功能。

https://golang.org/pkg/unicode/#IsSymbol

package main

import (
    "fmt"
    "unicode"
)

func hasSymbol(str string) bool {
    for _, letter := range str {
        if unicode.IsSymbol(letter) {
            return true
        }
    }
    return false
}

func main() {   
    var strs = []string {
        "A quick brown fox",
        "A+quick_brown<fox",
    }

    for _, str := range strs {
        if hasSymbol(str) { 
            fmt.Printf("String '%v' contains symbols.\n", str)
        } else {
            fmt.Printf("String '%v' did not contain symbols.\n", str)   
        }
    }
}

这将提供以下输出:

String 'A quick brown fox' did not contain symbols.
String 'A+quick_brown<fox' contains symbols.

【讨论】:

  • 这适用于 +、\n 等转义序列提供正确的输出。
  • @Nikhita 根据 Kipz 对主要问题的评论,他并不担心转义字符。问题中也没有提到他们。这可能是该问题的最佳解决方案。
【解决方案4】:

我最终做了这样的事情

alphabet := "abcdefghijklmnopqrstuvwxyz"
alphabetSplit := strings.Split(alphabet, "")
inputLetters := strings.Split(input, "")

for index, value := range inputLetters {
        special:=1
        for _, char :=range alphabetSplit{
            if char == value {
                special = 0
                break
            }
        }

它可能有什么问题,因为因为我将它用于特定的东西,所以我必须编辑它才能在此处发布

【讨论】:

  • 仅仅迭代一个字符串需要做很多额外的工作。
  • 这不允许使用大写字符、带有像é、ñ 和ç 这样的变音符号的字符,非拉丁文字。基本上任何不是英语的东西都不会通过。
猜你喜欢
  • 2010-12-20
  • 2022-08-11
  • 2020-03-15
  • 2016-08-24
  • 2014-11-25
  • 1970-01-01
  • 2021-11-21
  • 2016-08-01
  • 1970-01-01
相关资源
最近更新 更多