Без регулярных выражений:
https://play.golang.org/p/SIqQunrMQHI
import (
"strings"
)
func normalize(s string) string {
var sb strings.Builder
for _, r := range s {
switch {
case '0' <= r && r <= '9':
case r == '+':
default:
continue
}
sb.WriteRune(r)
}
return sb.String()
}
С регeлярками:
https://play.golang.org/p/GYzsCTaEa9W
import (
"regexp"
"strings"
)
var re = regexp.MustCompile(`(?i)[\d\+]+`)
func normalize(s string) string {
var sb strings.Builder
subs := re.FindAllStringSubmatch(s, -1)
for _, sub := range subs {
sb.WriteString(sub[0])
}
return sb.String()
}
Или вариант с заменой сиволов:
var re = regexp.MustCompile(`(?m)[^+\d]`)
var str = `+999 (99)-999 9999`
fmt.Println(re.ReplaceAllString(str, ""))
Версия без регулярок более экономна по ресурсам процессора и памяти, но при изменении паттерна потребует изменения и кода функции.