package lulu import ( "fmt" "regexp" ) var phoneExpr = regexp.MustCompile(`^\+?[\d\s\-.\/()]{8,20}$`) type PhoneNumber string func ParsePhoneNumber(s string) (PhoneNumber, error) { if phoneExpr.MatchString(s) { return PhoneNumber(s), nil } return "", fmt.Errorf("malformed phone number %q; must fit pattern `%s`", s, phoneExpr.String()) } // MustParsePhoneNumber is like ParsePhoneNumber but panics if the phone // number cannot be parsed. func MustParsePhoneNumber(s string) PhoneNumber { n, err := ParsePhoneNumber(s) if err != nil { panic(fmt.Sprintf("lulu: ParsePhoneNumber(%q): %v", s, err)) } return n } func (n *PhoneNumber) UnmarshalText(text []byte) error { pn, err := ParsePhoneNumber(string(text)) if err != nil { return err } *n = pn return nil }