diff --git a/pkg/schema/validate/string.go b/pkg/schema/validate/string.go
index f05ca540034e3cfab7e57c1aa324bcb343b97431..33fa453d0c707b893803f6e43484e50f232e8506 100644
--- a/pkg/schema/validate/string.go
+++ b/pkg/schema/validate/string.go
@@ -18,6 +18,9 @@ func MaxLength(max int) Validator {
 }
 
 func (t maxLength) Validate(_ context.Context, field *field.Field, value interface{}) error {
+	if value == nil {
+		return nil
+	}
 	if s, ok := value.(string); ok {
 		n := utf8.RuneCountInString(s)
 		if t > 0 && n > int(t) {
@@ -36,6 +39,9 @@ func MinLength(max int) Validator {
 }
 
 func (t minLength) Validate(_ context.Context, field *field.Field, value interface{}) error {
+	if value == nil {
+		return nil
+	}
 	if s, ok := value.(string); ok {
 		n := utf8.RuneCountInString(s)
 		if n < int(t) {
diff --git a/pkg/schema/validate/string_test.go b/pkg/schema/validate/string_test.go
index b67e8c8d4f5056c61d5483a536701777d716bead..9d48cf4d75c5c7bba2763c125bc1b598e78b23ac 100644
--- a/pkg/schema/validate/string_test.go
+++ b/pkg/schema/validate/string_test.go
@@ -92,9 +92,15 @@ func TestString(t *testing.T) {
 		wantErr bool
 	}{
 		{"Length Max", field.String().AddOptions(MaxLength(5)), "1234567", true},
+		{"Length Max with <nil>", field.String().AddOptions(MaxLength(5)), nil, false},
+		{"Length Max and Required with <nil>", field.String().AddOptions(MaxLength(5), Required()), nil, true},
 		{"Length Min", field.String().AddOptions(MinLength(10)), "1234", true},
+		{"Length Min with <nil>", field.String().AddOptions(MinLength(10)), nil, false},
+		{"Length Min and Required with <nil>", field.String().AddOptions(MinLength(10), Required()), nil, true},
 		{"Length MinMax", field.String().AddOptions(MaxLength(6), MinLength(2)), "1234567", true},
 		{"Length MinMax", field.String().AddOptions(MaxLength(10), MinLength(7)), "123456", true},
+		{"Length MinMax with <nil>", field.String().AddOptions(MaxLength(10), MinLength(7)), nil, false},
+		{"Length MinMax and Required with <nil>", field.String().AddOptions(MaxLength(10), MinLength(7), Required()), nil, true},
 		{"Enum miss", field.String().AddOptions(Enum(EnumOpt{Name: "N 1", Value: "n1"}, EnumOpt{Name: "N 2", Value: "n2"})), "n3", true},
 		{"Enum match", field.String().AddOptions(Enum(EnumOpt{Name: "N 1", Value: "n1"}, EnumOpt{Name: "N 2", Value: "n2"})), "n2", false},
 		{"Invalid Schema Options", field.String().AddOptions(Schema()), invalidOptionsSchema, true},
@@ -129,8 +135,6 @@ func TestStringValidate(t *testing.T) {
 	}{
 		{"String Length Max", field.String().AddOptions(MaxLength(1)), "1", false, ""},
 		{"String Length Min", field.String().AddOptions(MinLength(1)), "1", false, ""},
-		{"Nil Length Max", field.String().AddOptions(MaxLength(1)), nil, true, "validation error: incorrect type: \"invalid\", expected \"string\""},
-		{"Nil Length Min", field.String().AddOptions(MinLength(1)), nil, true, "validation error: incorrect type: \"invalid\", expected \"string\""},
 		{"Int Length Max", field.String().AddOptions(MaxLength(1)), 1, true, "validation error: incorrect type: \"int\", expected \"string\""},
 		{"Int Length Min", field.String().AddOptions(MinLength(1)), 1, true, "validation error: incorrect type: \"int\", expected \"string\""},
 		{"Float Length Max", field.String().AddOptions(MaxLength(1)), 1.0, true, "validation error: incorrect type: \"float64\", expected \"string\""},