respect-validation/docs/validators/ContainsCount.md
Alexandre Gomes Gaigalas ec16b3d2df Refactor case sensitiveness support
This is a mid-size refactor that affects several validators.

Most prominently, the ones that had an `$identical` parameter
to deal with case sensitiveness.

This parameter was confusing, effectively making validators such
as `Contains` behave very differently for arrays versus strings.

In arrays, `$identical` meant "the same type", while it in strings
it meant "case sensitive".

That parameter was removed, and the default behavior is now to
always compare **case sensitive** and strict typing.

A document explaining how to combine other validators in order
to achieve case _insensitive_ comparisons was added.

Additionally, the `Call` validator was refactored back to be
suitable to take on the task of being a fast, quick composable
validator.

With the introduction of `Circuit`, we can shift the responsibility
of dealing with possible mismatches to the user. This kind of type
handling is demonstrated in how I refactored `Tld` to account for
the type mismatch without setting error handlers.
2026-01-30 17:11:13 +00:00

72 lines
2 KiB
Markdown

<!--
SPDX-FileCopyrightText: (c) Respect Project Contributors
SPDX-License-Identifier: MIT
-->
# ContainsCount
- `ContainsCount(mixed $containsValue, int $count)`
Validates if the input contains a value a specific number of times.
For strings:
```php
v::containsCount('ipsum', 2)->assert('ipsum lorem ipsum');
// Validation passes successfully
```
For arrays:
```php
v::containsCount('ipsum', 2)->assert(['ipsum', 'lorem', 'ipsum']);
// Validation passes successfully
```
## Templates
### `ContainsCount::TEMPLATE_TIMES`
| Mode | Template |
| ---------: | :--------------------------------------------------------------- |
| `default` | {{subject}} must contain {{containsValue}} {{count}} time(s) |
| `inverted` | {{subject}} must not contain {{containsValue}} {{count}} time(s) |
### `ContainsCount::TEMPLATE_ONCE`
| Mode | Template |
| ---------: | :------------------------------------------------------- |
| `default` | {{subject}} must contain {{containsValue}} only once |
| `inverted` | {{subject}} must not contain {{containsValue}} only once |
## Template placeholders
| Placeholder | Description |
| --------------- | ---------------------------------------------------------------- |
| `containsValue` | The value to search for in the input. |
| `subject` | The validated input or the custom validator name (if specified). |
| `count` | Number of times that the needle might appear in the haystack. |
## Categorization
- Arrays
- Strings
## Changelog
| Version | Description |
| ------: | :---------- |
| 3.0.0 | Created |
## See Also
- [Contains](Contains.md)
- [ContainsAny](ContainsAny.md)
- [EndsWith](EndsWith.md)
- [Equals](Equals.md)
- [Equivalent](Equivalent.md)
- [Identical](Identical.md)
- [In](In.md)
- [Regex](Regex.md)
- [StartsWith](StartsWith.md)
- [Unique](Unique.md)