Quellcode durchsuchen

add workspace, validation

Aneurin Barker Snook vor 1 Jahr
Commit
f41d6f248a
5 geänderte Dateien mit 98 neuen und 0 gelöschten Zeilen
  1. 18 0
      email.go
  2. 27 0
      email_test.go
  3. 3 0
      go.mod
  4. 18 0
      uuid.go
  5. 32 0
      uuid_test.go

+ 18 - 0
email.go

@@ -0,0 +1,18 @@
+package validate
+
+import (
+	"errors"
+	"regexp"
+)
+
+// Based on https://stackoverflow.com/a/201378
+var emailRegexp = regexp.MustCompile("^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\\])$")
+
+// Email validates an email address.
+func Email(value string) error {
+	if !emailRegexp.MatchString(value) {
+		return errors.New("Invalid email address")
+	}
+
+	return nil
+}

+ 27 - 0
email_test.go

@@ -0,0 +1,27 @@
+package validate
+
+import "testing"
+
+func TestInvalidEmail(t *testing.T) {
+	valid := []string{
+		"testexample.com",
+	}
+
+	for _, email := range valid {
+		if err := Email(email); err == nil {
+			t.Errorf("%s is not a valid email", email)
+		}
+	}
+}
+
+func TestValidEmail(t *testing.T) {
+	valid := []string{
+		"test@example.com",
+	}
+
+	for _, email := range valid {
+		if err := Email(email); err != nil {
+			t.Errorf("%s is a valid email", email)
+		}
+	}
+}

+ 3 - 0
go.mod

@@ -0,0 +1,3 @@
+module github.com/recipeer/go/validate
+
+go 1.21.1

+ 18 - 0
uuid.go

@@ -0,0 +1,18 @@
+package validate
+
+import (
+	"errors"
+	"regexp"
+)
+
+var uuidRegexp = regexp.MustCompile("^[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}$")
+
+// UUID validates a UUID string.
+// The UUID must be formatted with separators.
+func UUID(value string) error {
+	if !uuidRegexp.MatchString(value) {
+		return errors.New("Invalid UUID")
+	}
+
+	return nil
+}

+ 32 - 0
uuid_test.go

@@ -0,0 +1,32 @@
+package validate
+
+import "testing"
+
+func TestInvalidUUID(t *testing.T) {
+	invalid := []string{
+		"Not a UUID",
+		"00000000-00-0000-0000-00000000000000",
+		"00000000000000000000000000000000",
+		"01234567-89ab-cdef-ghij-klmnopqrstuv",
+	}
+
+	for _, uuid := range invalid {
+		if err := UUID(uuid); err == nil {
+			t.Errorf("%s is not a valid UUID", uuid)
+		}
+	}
+}
+
+func TestValidUUID(t *testing.T) {
+	valid := []string{
+		"00000000-0000-0000-0000-000000000000",
+		"01234567-89ab-cdef-0123-456789abcdef",
+		"abcdef01-2345-6789-abcd-ef0123456789",
+	}
+
+	for _, uuid := range valid {
+		if err := UUID(uuid); err != nil {
+			t.Errorf("%s is a valid UUID", uuid)
+		}
+	}
+}