From 2e3346998782ef748bb1c81cbd988f3b1dcd5d2c Mon Sep 17 00:00:00 2001 From: Eduardo Bacarin Date: Fri, 4 Jul 2025 11:43:22 -0300 Subject: [PATCH] Custom validator created with some functions --- src/validator.php | 160 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 src/validator.php diff --git a/src/validator.php b/src/validator.php new file mode 100644 index 0000000..a3a1403 --- /dev/null +++ b/src/validator.php @@ -0,0 +1,160 @@ + $ruleString) { + $value = getDataValue($data, $field); + $ruleList = explode('|', $ruleString); + + $hasSometimes = in_array('sometimes', $ruleList, true); + if ($hasSometimes && !fieldExistsInData($data, $field)) { + continue; + } + + foreach ($ruleList as $ruleItem) { + if ($ruleItem === 'sometimes') { + continue; // already handled + } + + $param = null; + if (strpos($ruleItem, ':') !== false) { + $exploded = explode(':', $ruleItem, 2); + $rule = $exploded[0]; + $param = isset($exploded[1]) ? $exploded[1] : null; + } else { + $rule = $ruleItem; + } + + $validator = 'validate_' . $rule; + + if (function_exists($validator)) { + $result = $validator($field, $value, $param, $data); + + if ($result !== true) { + $errors[$field][] = $result; + } + } else { + $errors[$field][] = "Rule '$rule' is not supported."; + } + } + } + + return ['valid' => !empty($errors) ? false : true, 'errors' => $errors]; +} + +function validate_array($field, $value, $param = null, $data = []) +{ + if (!is_array($value)) { + return "The field '$field' must be an array."; + } + return true; +} + +function validate_integer($field, $value, $param = null, $data = []) +{ + if (!is_int($value)) { + return "The field '$field' must be an integer."; + } + return true; +} + +function validate_max($field, $value, $param, $data = []) +{ + if (is_string($value) && strlen($value) > $param) { + return "The field '$field' must have at most $param characters."; + } + if (is_integer($value) && $value > $param) { + return "The value of '$field' must be at most $param."; + } + return true; +} + +function validate_min($field, $value, $param, $data = []) +{ + if (is_string($value) && strlen($value) < $param) { + return "The field '$field' must have at least $param characters."; + } + if (is_numeric($value) && $value < $param) { + return "The value of '$field' must be at least $param."; + } + return true; +} + +function validate_prohibited_with($field, $value, $param, $data = []) +{ + $otherFields = explode(',', $param); + + foreach ($otherFields as $other) { + $other = trim($other); + if (!empty($data[$other])) { + if (!empty($value)) { + return "The field '$field' is not allowed when '$other' is present."; + } + } + } + + return true; +} + +function validate_required($field, $value, $param = null, $data = []) +{ + if ($value === null || $value === '') { + return "The field '$field' is required."; + } + return true; +} + +function validate_required_with($field, $value, $param, $data = []) +{ + $relatedFields = explode(',', $param); + + foreach ($relatedFields as $related) { + $related = trim($related); + + if (isset($data[$related]) && $data[$related] !== '') { + if ($value === null || $value === '') { + return "The field '$field' is required when '$related' is present."; + } + } + } + + return true; +} + +function validate_string($field, $value, $param = null, $data = []) +{ + if (!is_string($value)) { + return "The field '$field' must be a string."; + } + return true; +}