mirror of
https://github.com/Karaka-Management/Developer-Guide.git
synced 2026-01-11 12:28:41 +00:00
189 lines
4.5 KiB
Markdown
Executable File
189 lines
4.5 KiB
Markdown
Executable File
# Validation
|
|
|
|
The built in validation allows to quickly validate some basic data formats.
|
|
|
|
## Validator
|
|
|
|
The `Validator` provides basic validations with:
|
|
|
|
### isValid
|
|
|
|
With the `isValid` function you can provide a variable which should be validated and one or multiple constraints which should be checked. The return is a boolean.
|
|
|
|
```php
|
|
public static function isValid(mixed $var, array $constraints = null) : bool;
|
|
```
|
|
|
|
Example:
|
|
|
|
```php
|
|
function functionName(mixed $var, $mySetting1, $mySetting2) : bool
|
|
{
|
|
// Do some validation here
|
|
return true;
|
|
}
|
|
|
|
Validator::isValid($testVariable, ['functionName' => $settings]);
|
|
```
|
|
|
|
The second parameter (settings parameter) contains an associative array where the key is the function name which should get invoked and the value are the settings/options/parameters passed to the function name. The function must be implemented by the user.
|
|
|
|
If multiple constraints are provided the validation only returns true if all validations are successful.
|
|
|
|
In order to negate the validation simply add a `Not` to the function name.
|
|
|
|
> The negated function name with *Not* must not be separately implemented as it will be negated internally.
|
|
|
|
### hasLength
|
|
|
|
With `hasLength` you can check if a string has defined length.
|
|
|
|
```php
|
|
public static function hasLength(string $var, int $min = 0, int $max = \PHP_INT_MAX) : bool;
|
|
```
|
|
|
|
### hasLimit
|
|
|
|
With `hasLimit` you can check if a numeric value is in a defined range.
|
|
|
|
```php
|
|
public static function hasLimit(int | float $var, int | float $min = 0, int | float $max = \PHP_INT_MAX) : bool;
|
|
```
|
|
|
|
## Base
|
|
|
|
### DateTime
|
|
|
|
The `DateTime` validator checks if a specified value is a valid datetime.
|
|
|
|
```php
|
|
DateTime::isValid('2099-01-01');
|
|
```
|
|
|
|
### Json
|
|
|
|
The `Json` validator checks if a specified value is a valid json string.
|
|
|
|
```php
|
|
Json::isValid('[1, 2, 3]');
|
|
```
|
|
|
|
#### Templates
|
|
|
|
You can specify a json template which uses regex for validation. The template then is used to validate against a json array.
|
|
|
|
The validator checks for completeness, match against the template and possible additional specifications which are not part of the template.
|
|
|
|
Example for our `info.json` valdiation
|
|
|
|
```json
|
|
{
|
|
"name": {
|
|
"id": "^[1-9]\\d*",
|
|
"internal": "[a-zA-Z0-9]+",
|
|
"external": "[a-zA-Z0-9]+"
|
|
},
|
|
"category": "[a-zA-Z0-9]+",
|
|
"version": "([0-9]+\\.){2}[0-9]+",
|
|
"requirements": {
|
|
".*": ".*"
|
|
},
|
|
"creator": {
|
|
"name": ".+",
|
|
"website": ".*"
|
|
},
|
|
"description": ".+",
|
|
"directory": "[a-zA-Z0-9]+",
|
|
"dependencies": {
|
|
".*": ".*"
|
|
},
|
|
"providing": {
|
|
".*": ".*"
|
|
},
|
|
"load": [
|
|
{
|
|
"pid": [
|
|
".*"
|
|
],
|
|
"type": "^[1-9]\\d*",
|
|
"for": "^([1-9]\\d*)|([a-zA-Z0-9]+)",
|
|
"from": "[a-zA-Z0-9]+",
|
|
"file": "[a-zA-Z0-9]*"
|
|
}
|
|
]
|
|
}
|
|
|
|
```
|
|
|
|
The example above shows how to specify optional elements (e.g. "dependencies") which can have as many children in any form possible or optional values with a specific key (e.g. website) which can be omitted.
|
|
|
|
## Finance
|
|
|
|
### BIC
|
|
|
|
A simple BIC validator which only validates the structure not if it actually exists.
|
|
|
|
```php
|
|
BIC::isValid('DSBACNBXSHA');
|
|
```
|
|
|
|
### Iban
|
|
|
|
A simple IBAN validator which only validates the structure not if it actually exists.
|
|
|
|
```php
|
|
Iban::isValid('DE22 6008 0000 0960 0280 00');
|
|
```
|
|
|
|
### CreditCard
|
|
|
|
A simple credit card validator which only validates the structure not if it actually exists.
|
|
|
|
```php
|
|
CreditCard::isValid('4242424242424242');
|
|
```
|
|
|
|
## Network
|
|
|
|
### Email
|
|
|
|
A simple email validator which only validates the structure not if it actually exists.
|
|
|
|
```php
|
|
Email::isValid('test.string@email.com');
|
|
```
|
|
|
|
### Hostname
|
|
|
|
A simple hostname validator which only validates the structure not if it actually exists.
|
|
|
|
```php
|
|
Hostname::isValid('[2001:0db8:85a3:0000:0000:8a2e:0370:7334]'); // true
|
|
Hostname::isValid('test.com'); // true
|
|
|
|
Hostname::isValid('2001:0db8:85a3:0000:0000:8a2e:0370:7334'); // false
|
|
Hostname::isValid('http://test.com'); // false
|
|
```
|
|
|
|
### Ip
|
|
|
|
A simple Ip validator which only validates the structure not if it actually exists.
|
|
|
|
```php
|
|
IP::isValid('192.168.178.1');
|
|
IP::isValid('2001:0db8:85a3:0000:0000:8a2e:0370:7334');
|
|
|
|
IP::testValidIp4('192.168.178.1');
|
|
IP::testValidIp6('2001:0db8:85a3:0000:0000:8a2e:0370:7334');
|
|
```
|
|
|
|
> Please note that the Ip4 and Ip6 validators only validate their corresponding Ips which means that a Ip4 will not correctly validate as Ip6 and vice versa.
|
|
|
|
## Enum
|
|
|
|
Enums can be validated by name/key and by value.
|
|
|
|
```php
|
|
MyEnum::isValidName('ENUM_NAME');
|
|
MyEnum::isValidValue(123);
|
|
``` |