> For the complete documentation index, see [llms.txt](https://quantumphp.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://quantumphp.gitbook.io/docs/packages/validation/rules.md).

# Rules

This page summarizes the built-in rules shipped by the package.

## Presence and format rules

### `required`

Passes only when the value is neither an empty string nor `0`.

That means both `''` and `'0'` return an error. Integer `0` does the same because the rule casts to string first.

### `email`

Validates a standard email address with PHP's `FILTER_VALIDATE_EMAIL`.

### `creditCard`

Validates the card number with a Luhn-style checksum after stripping non-digit characters.

### `iban`

Validates IBAN format and checksum. It depends on `bcmod()` support for the final modulus check.

### `name`

Accepts letters, spaces, apostrophes, and hyphens.

### `streetAddress`

Requires a value that contains at least one letter, one digit, and one whitespace character.

### `phoneNumber`

Accepts a narrow set of common phone number layouts such as:

* `555-555-5555`
* `555 555 5555`
* `1 (519) 555-4422`
* `+1-555-555-5555`

### `date(?string $format = null)`

Without a format, the package accepts only values that round-trip to one of these shapes:

* `Y-m-d`
* `Y-m-d H:i:s`

When you pass a format, the value must match that format exactly.

### `starts(string $text)`

Checks that the value begins with the provided prefix.

### `regex(string $pattern)`

Runs a custom regular expression with `preg_match()`.

### `jsonString`

Passes only when decoding produces an object.

This is stricter than "valid JSON" in general. JSON arrays, numbers, booleans, and strings do not satisfy this rule.

### `same(string $otherField)`

Checks loose equality against another field in the same input payload.

Use it for password confirmation or duplicate-entry checks.

Include the referenced field in the submitted payload. The comparison reads the original input array directly, so sending both keys keeps the result predictable.

### `captcha`

Delegates to the Captcha package's default adapter and calls `verify()`.

Use it only after the Captcha package is configured.

## Database-backed rules

### `unique(string $modelClass, string $column)`

Passes when the resolved model does not find an existing record for the given column value.

### `exists(string $modelClass, string $column)`

Passes when the resolved model does find an existing record for the given column value.

For both rules:

* pass a model class, not a table name
* the model must be resolvable through the Model package
* database and model configuration errors bubble up

## Type and numeric rules

### `alpha`

Letters only.

### `alphaNumeric`

Letters and digits only.

### `alphaDash`

Letters, underscores, and dashes only.

Digits are not accepted by this rule.

### `alphaSpace`

Letters, digits, and whitespace only.

### `numeric`

Uses `is_numeric()`.

### `integer`

Uses `FILTER_VALIDATE_INT`.

### `float`

Uses `FILTER_VALIDATE_FLOAT`.

Integer input also passes this rule.

### `boolean`

Accepts only this fixed set of values:

* `true`, `false`
* `1`, `0`
* `'true'`, `'false'`
* `'1'`, `'0'`
* `'yes'`, `'no'`
* `'on'`, `'off'`

### `minNumeric($number)`

Passes when both values are numeric and the input is greater than or equal to the minimum.

### `maxNumeric($number)`

Passes when both values are numeric and the input is less than or equal to the maximum.

## Length and membership rules

### `minLen(int $length)`

Checks multibyte string length with `mb_strlen()`.

### `maxLen(int $length)`

Checks multibyte string length with `mb_strlen()`.

### `exactLen(int $length)`

Checks multibyte string length with `mb_strlen()`.

### `contains(string $haystack)`

Checks whether the normalized input value appears anywhere inside the provided text.

Comparison is case-insensitive and trims both sides first.

### `containsList(string ...$list)`

Checks whether the normalized value matches one of the provided list items.

Comparison is case-insensitive and trims whitespace.

### `doesntContainsList(string ...$list)`

Inverse of `containsList()`.

## File rules

These rules expect the field value to be a `Quantum\Storage\UploadedFile` instance.

### `fileSize(int $maxSize, ?int $minSize = null)`

Checks byte size against a maximum and optional minimum.

If `minSize` is omitted, the lower bound becomes `0`.

### `fileMimeType(string ...$mimeTypes)`

Checks the detected MIME type of the uploaded file against the allowed list.

### `fileExtension(string ...$extensions)`

Checks the normalized file extension from the original uploaded filename.

### `imageDimensions(?int $width = null, ?int $height = null)`

Checks exact image dimensions when width and/or height are provided.

If you pass only one dimension, only that side is enforced.

This rule is for real image files. Non-image input can raise `FileUploadException` before the validator has a chance to add a normal validation error.

## URL and IP rules

### `url`

Requires a full valid URL.

### `urlExists`

First validates the URL, then checks whether the hostname resolves.

This is a DNS-level existence check, not an HTTP status check.

On installations with `checkdnsrr()` and `idn_to_ascii()`, the lookup checks for an `A` record. If you need different DNS behavior, add a custom rule for your project.

### `ip`

Accepts any valid IP address.

### `ipv4`

Accepts only IPv4 addresses.

### `ipv6`

Accepts only IPv6 addresses.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://quantumphp.gitbook.io/docs/packages/validation/rules.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
