在从输入中读取字符串后,我需要检查其中是否有特殊字符。
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")
}
}
根据您对特殊字符的定义,最简单的解决方案可能是在字符串上执行for range
循环(产生的是符文而不是字节),并且对于每个符文,检查它是否在允许/禁止符文列表中。
有关字符串、字节和符文之间关系的更多信息,请参见Strings, bytes, runes and characters in Go。
package main
var allowed = []rune{'a','b','c','d','e','f','g'}
func haveSpecial(input string) bool {
for _, char := range input {
found := false
for _, c := range allowed {
if c == char {
found = true
break
}
}
if !found {
return true
}
}
return false
}
func main() {
cases := []string{
"abcdef",
"abc$€f",
}
for _, input := range cases {
if haveSpecial(input) {
println(input + ": NOK")
} else {
println(input + ": OK")
}
}
}
allowed
改为一个映射,那么你就可以获得 O(1) 的访问。 - blackgreen你想使用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 Raghunathalphabet := "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
}
}
可能有任何问题,因为我曾经用它来处理特定的事情,所以我必须编辑一下才能在这里发布
é
、ñ
和ç
,非拉丁文字符。基本上任何不是英语的东西都不能通过。 - Roshambo