package check import ( "unicode" "unicode/utf8" ) // letterAt отвечает, стоит ли по смещению i буква или цифра. Кириллица в UTF-8 // занимает два байта, поэтому решать по одному байту нельзя. func letterAt(text string, i int) bool { if i >= len(text) { return false } r, _ := utf8.DecodeRuneInString(text[i:]) return unicode.IsLetter(r) || unicode.IsDigit(r) } // letterBefore отвечает, стоит ли перед смещением i буква или цифра. func letterBefore(text string, i int) bool { if i <= 0 { return false } r, _ := utf8.DecodeLastRuneInString(text[:i]) return unicode.IsLetter(r) || unicode.IsDigit(r) } func digitAt(text string, i int) bool { if i >= len(text) { return false } r, _ := utf8.DecodeRuneInString(text[i:]) return unicode.IsDigit(r) } func digitBefore(text string, i int) bool { if i <= 0 { return false } r, _ := utf8.DecodeLastRuneInString(text[:i]) return unicode.IsDigit(r) }