如何检查字符串中是否有特殊字符或字符是否为GoLang中的特殊字符

How to check if there is a special character in string or if a character is a special character in GoLang

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

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

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

Playground example

您可以使用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")
    }
}

我最终做了这样的事情

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
            }
        }

它可能有任何问题,因为我将它用于特定的东西,所以我不得不在此处将其编辑为 post

您想使用 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.