如何检查字符串中是否只包含字母字符?

Cas*_*per 22 go

我正在尝试检查用户名是否只包含字母字符.在Go中检查它的惯用方法是什么?

小智 41

你可以unicode.IsLetter像这个工作示例代码一样使用:

package main

import "fmt"
import "unicode"

func IsLetter(s string) bool {
    for _, r := range s {
        if !unicode.IsLetter(r) {
            return false
        }
    }
    return true
}
func main() {
    fmt.Println(IsLetter("Alex")) // true
    fmt.Println(IsLetter("123"))  // false
}
Run Code Online (Sandbox Code Playgroud)

或者如果您的范围有限,例如'a'..'z'和'A'..'Z',您可以使用此工作示例代码:

package main

import "fmt"

func IsLetter(s string) bool {
    for _, r := range s {
        if (r < 'a' || r > 'z') && (r < 'A' || r > 'Z') {
            return false
        }
    }
    return true
}
func main() {
    fmt.Println(IsLetter("Alex"))  // true
    fmt.Println(IsLetter("123 a")) // false

}
Run Code Online (Sandbox Code Playgroud)

或者如果您的范围有限,例如'a'..'z'和'A'..'Z',您可以使用此工作示例代码:

package main

import "fmt"
import "regexp"

var IsLetter = regexp.MustCompile(`^[a-zA-Z]+$`).MatchString

func main() {
    fmt.Println(IsLetter("Alex")) // true
    fmt.Println(IsLetter("u123")) // false
}
Run Code Online (Sandbox Code Playgroud)

  • @CasperLI(自由地)引用Rob Pike:"一点点复制比一点依赖更好". (2认同)

Jim*_*imB 9

假设您只是在寻找 ascii 字母,您通常会看到这是使用 alpha 字符类[[:alpha:]]或等价物作为正则表达式实现的[A-Za-z]

isAlpha := regexp.MustCompile(`^[A-Za-z]+$`).MatchString

for _, username := range []string{"userone", "user2", "user-three"} {
    if !isAlpha(username) {
        fmt.Printf("%q is not valid\n", username)
    }
}
Run Code Online (Sandbox Code Playgroud)

https://play.golang.org/p/lT9Fki7tt7


Tom*_*and 8

这是我做的方式:

import "strings"

const alpha = "abcdefghijklmnopqrstuvwxyz"

func alphaOnly(s string) bool {
   for _, char := range s {  
      if !strings.Contains(alpha, strings.ToLower(string(char))) {
         return false
      }
   }
   return true
}
Run Code Online (Sandbox Code Playgroud)

  • `é`是一个字母字符. (12认同)

stw*_*ykd 6

您也可以简洁地执行此操作,而无需导入任何包

func isLetter(c rune) bool {
    return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z')
}

func isWord(s string) bool {
    for _, c := range s {
        if !isLetter(c) {
            return false
        }
    }
    return true
}
Run Code Online (Sandbox Code Playgroud)