generated from VLADIMIR/template
67 lines
1.5 KiB
Go
67 lines
1.5 KiB
Go
package string_tools
|
||
|
||
import (
|
||
"regexp"
|
||
"strings"
|
||
)
|
||
|
||
var (
|
||
replacer = strings.NewReplacer(
|
||
"а", "a",
|
||
"б", "b",
|
||
"в", "v",
|
||
"г", "g",
|
||
"д", "d",
|
||
"е", "e",
|
||
"ё", "yo",
|
||
"ж", "zh",
|
||
"з", "z",
|
||
"и", "i",
|
||
"й", "y",
|
||
"к", "k",
|
||
"л", "l",
|
||
"м", "m",
|
||
"н", "n",
|
||
"о", "o",
|
||
"п", "p",
|
||
"р", "r",
|
||
"с", "s",
|
||
"т", "t",
|
||
"у", "u",
|
||
"ф", "f",
|
||
"х", "h",
|
||
"ц", "ts",
|
||
"ч", "ch",
|
||
"ш", "sh",
|
||
"щ", "sch",
|
||
"ъ", "",
|
||
"ы", "y",
|
||
"ь", "",
|
||
"э", "e",
|
||
"ю", "yu",
|
||
"я", "ya",
|
||
" ", "_",
|
||
)
|
||
)
|
||
|
||
// Transliterate выполняет транслитерацию русского текста в латиницу,
|
||
// заменяет пробелы на _, удаляет все остальные символы, кроме цифр (знаки препинания и т.д.)
|
||
func Transliterate(text string) string {
|
||
|
||
// Приводим к нижнему регистру и транслитерируем
|
||
result := replacer.Replace(strings.ToLower(text))
|
||
|
||
// Удаляем все символы, кроме букв латиницы, подчеркивания и цифр
|
||
reg := regexp.MustCompile(`[^a-z0-9_]`)
|
||
result = reg.ReplaceAllString(result, "")
|
||
|
||
// Удаляем множественные подчеркивания (опционально)
|
||
regMulti := regexp.MustCompile(`_+`)
|
||
result = regMulti.ReplaceAllString(result, "_")
|
||
|
||
// Удаляем подчеркивания в начале и конце строки (опционально)
|
||
result = strings.Trim(result, "_")
|
||
|
||
return result
|
||
}
|