web-dev-qa-db-fra.com

Comment vérifier si une chaîne est entièrement en majuscules ou minuscules dans Go?

Quel est le moyen simple dans Golang de vérifier si tous les caractères d'une chaîne sont en majuscules ou en minuscules?

Aussi, comment gérer un cas où la chaîne a une ponctuation?

Voir ces exemples:

package main

import (
    "fmt"
    "unicode"
)

func main() {
    s := "UPPERCASE"
    fmt.Println(s.IsUpper())  // Should print true

    s = "lowercase"
    fmt.Println(s.IsUpper())  // Should print false

    s = "lowercase"
    fmt.Println(s.IsLower())  // Should print true

    s = "I'M YELLING AT YOU!"
    fmt.Println(s.IsUpper())  // Should print true
}

Remarque: s.IsUpper () et s.IsLower () n'existent pas vraiment, mais ce serait bien de trouver un équivalent.

4
jersey bean

Vous pouvez bien sûr comparer les chaînes majuscules et minuscules dans leur intégralité, ou vous pouvez court-circuiter les comparaisons au premier échec, ce qui serait plus efficace lors de la comparaison de chaînes longues.

func IsUpper(s string) bool {
    for _, r := range s {
        if !unicode.IsUpper(r) && unicode.IsLetter(r) {
            return false
        }
    }
    return true
}

func IsLower(s string) bool {
    for _, r := range s {
        if !unicode.IsLower(r) && unicode.IsLetter(r) {
            return false
        }
    }
    return true
}
7
JimB

Une solution consiste à utiliser strings.ToUpper ()/ToLower () et à comparer avec la chaîne d'origine. Cela fonctionne également pour le cas de ponctuation.

Voici la solution:

package main

import (
    "fmt"
    "strings"
)

func main() {
    s := "UPPERCASE"
    fmt.Println(strings.ToUpper(s) == s)

    s = "lowercase"
    fmt.Println(strings.ToUpper(s) == s)

    s = "lowercase"
    fmt.Println(strings.ToLower(s) == s)

    s = "I'M YELLING AT YOU!"
    fmt.Println(strings.ToUpper(s) == s)
}
3
jersey bean