summaryrefslogtreecommitdiff
path: root/go/phone-number/phone_number.go
diff options
context:
space:
mode:
Diffstat (limited to 'go/phone-number/phone_number.go')
-rw-r--r--go/phone-number/phone_number.go38
1 files changed, 38 insertions, 0 deletions
diff --git a/go/phone-number/phone_number.go b/go/phone-number/phone_number.go
new file mode 100644
index 0000000..f88145a
--- /dev/null
+++ b/go/phone-number/phone_number.go
@@ -0,0 +1,38 @@
+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
+}