File size: 1,392 Bytes
e089492 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | package stringext
import (
"encoding/base64"
"strings"
"golang.org/x/text/cases"
"golang.org/x/text/language"
)
func Capitalize(text string) string {
return cases.Title(language.English, cases.Compact).String(text)
}
// NormalizeSpace normalizes whitespace in the given content string.
// It replaces Windows-style line endings with Unix-style line endings,
// converts tabs to four spaces, and trims leading and trailing newlines.
// Per-line indentation is preserved: trimming spaces would eat the first
// line's leading whitespace and corrupt indentation in code previews.
func NormalizeSpace(content string) string {
content = strings.ReplaceAll(content, "\r\n", "\n")
content = strings.ReplaceAll(content, "\t", " ")
content = strings.Trim(content, "\n")
return content
}
// IsValidBase64 reports whether s is canonical base64 under standard
// encoding (RFC 4648). It requires that s round-trips through
// decode/encode unchanged — rejecting whitespace, missing padding,
// and other leniencies that DecodeString alone would accept.
func IsValidBase64(s string) bool {
if s == "" {
return false
}
decoded, err := base64.StdEncoding.DecodeString(s)
if err != nil {
return false
}
// Round-trip check rejects whitespace, missing padding, and other
// leniencies that DecodeString silently accepts.
return base64.StdEncoding.EncodeToString(decoded) == s
}
|