Vous pouvez utiliser des chaînes.ContainsAny pour voir si une rune existe:
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",",|"))}
Ou si vous voulez vérifier si il y a uniquement des caractères ASCII, vous pouvez utiliser des chaînes.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")}}
J'ai fini la vérification de tout ce qui n'est pas ABC...Z Merci! Le 2ème code fonctionne vraiment bien. Merci!
Selon votre définition de caractère spécial, la solution la plus simple serait probablement de faire un for range boucle sur votre chaîne (qui donnent des runes au lieu d'octets), et pour chaque rune vérifier si il est dans votre liste de permis/interdit runes.
il imprime 'NOK' même sans les caractères spéciaux si j'ai déjà une chaîne avec des caractères autorisés, comment puis-je convertir des runes? Merci! Par mal, j'ai bâclé le exemple. Voir le nouvel exemple corrigé.
package main
import("fmt""unicode")
func hasSymbol(str string)bool{for _, letter := range str {if unicode.IsSymbol(letter){returntrue}}returnfalse}
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)}}}
Cela donnera le résultat suivant:
String'A quick brown fox' did not contain symbols.String'A+quick_brown<fox' contains symbols.
Cela fonctionne pour les caractères unicode comme +, <, etc, mais ne donnera pas de bons résultats pour les séquences d'échappement comme \n, etc. Basé sur Kipz commentaire sur la question principale, il n'était pas inquiet au sujet des caractères d'échappement. Et ils n'étaient pas mentionnées dans la question. Cela aurait probablement été la meilleure solution pour le problème.
Vous pouvez utiliser des chaînes.ContainsAny pour voir si une rune existe:
Ou si vous voulez vérifier si il y a uniquement des caractères ASCII, vous pouvez utiliser des chaînes.IndexFunc:
Le 2ème code fonctionne vraiment bien. Merci!
OriginalL'auteur Joshua
Selon votre définition de caractère spécial, la solution la plus simple serait probablement de faire un
for range
boucle sur votre chaîne (qui donnent des runes au lieu d'octets), et pour chaque rune vérifier si il est dans votre liste de permis/interdit runes.Voir Des chaînes, des octets, des runes et des personnages dans le jeu de Go pour en savoir plus sur les relations entre la chaîne, les octets et les runes.
Aire de jeux exemple
Par mal, j'ai bâclé le exemple. Voir le nouvel exemple corrigé.
OriginalL'auteur Elwinar
Vous souhaitez utiliser l'unicode paquet, qui a une belle fonction pour vérifier les symboles.
https://golang.org/pkg/unicode/#IsSymbol
Cela donnera le résultat suivant:
\n
, etc.Basé sur Kipz commentaire sur la question principale, il n'était pas inquiet au sujet des caractères d'échappement. Et ils n'étaient pas mentionnées dans la question. Cela aurait probablement été la meilleure solution pour le problème.
OriginalL'auteur Andy
J'ai fini par faire quelque chose comme cela
Il pourrait avoir quelque chose de mal parce que depuis que je l'ai utilisé pour quelque chose de précis, j'ai eu à le modifier pour le poster ici
OriginalL'auteur Kipz