mirror of
https://github.com/lone-cloud/prism
synced 2026-06-03 08:43:10 -07:00
47 lines
895 B
Go
47 lines
895 B
Go
package signal
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
func FormatPhoneNumber(number string) string {
|
|
if number == "" {
|
|
return number
|
|
}
|
|
|
|
if strings.HasPrefix(number, "+1") && len(number) == 12 {
|
|
return fmt.Sprintf("+1 (%s) %s-%s", number[2:5], number[5:8], number[8:])
|
|
}
|
|
|
|
if strings.HasPrefix(number, "+") && len(number) > 4 {
|
|
digits := number[1:]
|
|
var countryCode, rest string
|
|
|
|
for i := 1; i <= 3 && i < len(digits); i++ {
|
|
if digits[i] < '0' || digits[i] > '9' {
|
|
break
|
|
}
|
|
countryCode = digits[:i+1]
|
|
rest = digits[i+1:]
|
|
}
|
|
|
|
if len(rest) >= 3 {
|
|
var parts []string
|
|
for len(rest) > 0 {
|
|
size := 3
|
|
if len(rest) == 4 || len(rest) == 8 {
|
|
size = 4
|
|
}
|
|
if size > len(rest) {
|
|
size = len(rest)
|
|
}
|
|
parts = append(parts, rest[:size])
|
|
rest = rest[size:]
|
|
}
|
|
return "+" + countryCode + " " + strings.Join(parts, " ")
|
|
}
|
|
}
|
|
|
|
return number
|
|
}
|