package phonenumber import ( "fmt" "unicode" ) func Number(s string) (string, error) { r := []rune{} for _, v := range s { if unicode.IsNumber(v) { r = append(r, v) } } switch { case len(r) == 11 && r[0] == '1': return string(r)[1:], nil case len(r) == 10: return string(r), nil } return "", fmt.Errorf("bad number") } func AreaCode(s string) (string, error) { num, err := Number(s) if err != nil { return "", err } return num[:3], nil } func Format(s string) (string, error) { num, err := Number(s) if err != nil { return "", err } return fmt.Sprintf("(%v) %v-%v", num[:3], num[3:6], num[6:]), nil }