A progressive PHP framework for building efficient and scalable server-side applications.
Welcome to the AssegaiPHP validation package! This package is designed to provide a simple and easy-to-use solution for validating data in your AssegaiPHP projects.
For commit and pull request conventions in this repo, see:
Git hooks for this repository live in .githooks. Running composer install or composer update
automatically configures core.hooksPath for this clone so the committed pre-push checks are used. To apply the
hook configuration manually, run:
composer run hooks:installTo install this package, run the following command in your project's root directory:
composer require assegaiphp/validationTo use this package, simply import the Assegai\Validation\Validator class and create a new instance. You can then use the validate() method to check if a value or array of values meet the specified criteria.
use Assegai\Validation\Validator;
$validator = new Validator();
$isValid = $validator->validate($value, 'required|email');The second argument to the validate() method is a string containing the validation rules to apply, separated by the | character. In the example above, the required and email rules are applied.
use Assegai\Validation\Interfaces\IValidationRule;
class MyCustomValidationRule extends IValidationRule
{
public function passes(mixed $value): bool
{
// validate the value
}
public function getErrorMessage(): string
{
return 'The value is invalid.';
}
}This package comes with a number of built-in validation rules, including:
alpha: value must contain only alphabetic charactersalnum: value must contain only alphanumeric charactersbetween:n,m: value must be between n and m (inclusive)domain: value must be a valid domain nameemail: value must be a valid email addressequalTo:n: value must be equal to nfloat: value must be a floating point numberinlist:l: value is in a specific list of allowed valuesinteger: value must be an integermaxLength:n: value must be no more than n characters longmax:n: value does not exceed a maximum value, nminLength:n: value must be at least n characters longmin:n: value is at least a certain value, nnotEqualTo:n: value must not be equal to nnotinlist:l: value is not in a specific list of disallowed valuesnumeric: value must be a numberregex:n: value must match the given regex pattern nrequired: value must be presentstring: value must be a stringurl: value must be a valid url
You can also create custom validation rules by extending the Assegai\Validation\Rule class and implementing the validate() method.
| Attribute | Description |
|---|---|
| Common validation attributes | |
| #[IsDefined(mixed $value)] | Checks if value is defined (!== undefined, !== null). This is the only attribute that ignores skipMissingProperties option. |
| #[IsOptional] | Checks if given value is empty (=== null, === undefined) and if so, ignores all the validators on the property. |
| #[Equals(mixed $comparison)] | Checks if value equals ("===") comparison. |
| #[NotEquals(mixed $comparison)] | Checks if value not equal ("!==") comparison. |
| #[IsEmpty] | Checks if given value is empty (=== '', === null, === undefined). |
| #[IsNotEmpty] | Checks if given value is not empty (!== '', !== null, !== undefined). |
| #[IsIn(array $values] | Checks if value is in an array of allowed values. |
| #[IsNotIn(array $values)] | Checks if value is not in an array of disallowed values. |
| Type validation attributes | |
| #[IsBoolean] | Checks if a value is a boolean. |
| #[IsDate] | Checks if the value is a date. |
| #[IsString] | Checks if the value is a string. |
| #[IsNumber(IsNumberOptions $options)] | Checks if the value is a number. |
| #[IsInt] | Checks if the value is an integer number. |
| #[IsArray] | Checks if the value is an array |
| #[IsEnum(string $enum)] | Checks if the value is a valid enum |
| Number validation attributes | |
| #[IsDivisibleBy(num: number)] | Checks if the value is a number that's divisible by another. |
| #[IsPositive] | Checks if the value is a positive number greater than zero. |
| #[IsNegative] | Checks if the value is a negative number smaller than zero. |
| #[Min(min: number)] | Checks if the given number is greater than or equal to given number. |
| #[Max(max: number)] | Checks if the given number is less than or equal to given number. |
| Date validation attributes | |
| #[MinDate(string $date] | Checks if the value is a date that's after the specified date. |
| #[MaxDate(string $date] | Checks if the value is a date that's before the specified date. |
| String-type validation attributes | |
| #[IsBooleanString] | Checks if a string is a boolean (e.g. is "true" or "false" or "1", "0"). |
| #[IsDateString] | Alias for @IsISO8601(). |
| #[IsNumberString(?IsNumericOptions $options)] | Checks if a string is a number. |
| String validation attributes | |
| #[Contains(seed: string)] | Checks if the string contains the seed. |
| #[NotContains(seed: string)] | Checks if the string not contains the seed. |
| #[IsAlpha] | Checks if the string contains only letters (a-zA-Z). |
| #[IsAlphanumeric] | Checks if the string contains only letters and numbers. |
| #[IsDecimal(?IsDecimalOptions $options)] | Checks if the string is a valid decimal value. Default IsDecimalOptions are force_decimal=False, decimal_digits: '1,', locale: 'en-US' |
| #[IsAscii] | Checks if the string contains ASCII chars only. |
| #[IsBase32] | Checks if a string is base32 encoded. |
| #[IsBase58] | Checks if a string is base58 encoded. |
| #[IsBase64(?IsBase64Options $options)] | Checks if a string is base64 encoded. |
| #[IsIBAN] | Checks if a string is a IBAN (International Bank Account Number). |
| #[IsBIC] | Checks if a string is a BIC (Bank Identification Code) or SWIFT code. |
| #[IsByteLength(int $min, ?int $max)] | Checks if the string's length (in bytes) falls in a range. |
| #[IsCreditCard] | Checks if the string is a credit card. |
| #[IsCurrency(?IsCurrencyOptions $options)] | Checks if the string is a valid currency amount. |
| #[IsISO4217CurrencyCode] | Checks if the string is an ISO 4217 currency code. |
| #[IsEthereumAddress] | Checks if the string is an Ethereum address using basic regex. Does not validate address checksums. |
| #[IsBtcAddress] | Checks if the string is a valid BTC address. |
| #[IsDataURI] | Checks if the string is a data uri format. |
| #[IsEmail(?IsEmailOptions $options)] | Checks if the string is an email. |
| #[IsFQDN(?IsFQDNOptions $options)] | Checks if the string is a fully qualified domain name (e.g. domain.com). |
| #[IsFullWidth] | Checks if the string contains any full-width chars. |
| #[IsHalfWidth] | Checks if the string contains any half-width chars. |
| #[IsVariableWidth] | Checks if the string contains a mixture of full and half-width chars. |
| #[IsHexColor] | Checks if the string is a hexadecimal color. |
| #[IsHSL] | Checks if the string is an HSL color based on CSS Colors Level 4 specification. |
| #[IsRgbColor(?IsRgbOptions $options)] | Checks if the string is a rgb or rgba color. |
| #[IsIdentityCard(?string $locale)] | Checks if the string is a valid identity card code. |
| #[IsPassportNumber(?string $countryCode)] | Checks if the string is a valid passport number relative to a specific country code. |
| #[IsPostalCode(?string $locale)] | Checks if the string is a postal code. |
| #[IsHexadecimal] | Checks if the string is a hexadecimal number. |
| #[IsOctal] | Checks if the string is a octal number. |
| #[IsMACAddress(?IsMACAddressOptions $options)] | Checks if the string is a MAC Address. |
| #[IsIP(?IPVersion $version)] | Checks if the string is an IP (version 4 or 6). |
| #[IsPort()] | Checks if the string is a valid port number. |
| #[IsISBN(?ISBNVersion $version)] | Checks if the string is an ISBN (version 10 or 13). |
| #[IsEAN] | Checks if the string is an if the string is an EAN (European Article Number). |
| #[IsISIN] | Checks if the string is an ISIN (stock/security identifier). |
| #[IsISO8601(?IsISO8601Options $options)] | Checks if the string is a valid ISO 8601 date format. Use the option strict = true for additional checks for a valid date. |
| #[IsJSON] | Checks if the string is valid JSON. |
| #[IsJWT] | Checks if the string is valid JWT. |
| #[IsObject] | Checks if the object is valid Object (null, functions, arrays will return false). |
| #[IsNotEmptyObject] | Checks if the object is not empty. |
| #[IsLowercase] | Checks if the string is lowercase. |
| #[IsLatLong] | Checks if the string is a valid latitude-longitude coordinate in the format lat, long. |
| #[IsLatitude] | Checks if the string or number is a valid latitude coordinate. |
| #[IsLongitude] | Checks if the string or number is a valid longitude coordinate. |
| #[IsMobilePhone(string $locale)] | Checks if the string is a mobile phone number. |
| #[IsISO31661Alpha2] | Checks if the string is a valid ISO 3166-1 alpha-2 officially assigned country code. |
| #[IsISO31661Alpha3] | Checks if the string is a valid ISO 3166-1 alpha-3 officially assigned country code. |
| #[IsLocale] | Checks if the string is a locale. |
| #[IsPhoneNumber(string $region)] | Checks if the string is a valid phone number using giggsey/libphonenumber-for-php. |
| #[IsMongoId] | Checks if the string is a valid hex-encoded representation of a MongoDB ObjectId. |
| #[IsMultibyte] | Checks if the string contains one or more multibyte chars. |
| #[IsNumberString(?IsNumericOptions $options)] | Checks if the string is numeric. |
| #[IsSurrogatePair] | Checks if the string contains any surrogate pairs chars. |
| #[IsTaxId] | Checks if the string is a valid tax ID. Default locale is en-US. |
| #[IsUrl(?IsURLOptions $options)] | Checks if the string is a URL. |
| #[IsMagnetURI] | Checks if the string is a magnet uri format. |
| #[IsUUID(?UUIDVersion $version)] | Checks if the string is a UUID (version 3, 4, 5 or all ). |
| #[IsFirebasePushId] | Checks if the string is a Firebase Push ID |
| #[IsUppercase] | Checks if the string is uppercase. |
| #[Length(int $min, ?int $max)] | Checks if the string's length falls in a range. |
| #[MinLength(int $min)] | Checks if the string's length is not less than given number. |
| #[MaxLength(int $max)] | Checks if the string's length is not more than given number. |
| #[Matches(RegExp $pattern, ?string $modifiers)] | Checks if string matches the pattern. Either matches('foo', /foo/i) or matches('foo', 'foo', 'i'). |
| #[IsMilitaryTime] | Checks if the string is a valid representation of military time in the format HH:MM. |
| #[IsTimeZone] | Checks if the string represents a valid IANA time-zone. |
| #[IsHash(string $algorithm)] | Checks if the string is a hash The following types are supported:md4, md5, sha1, sha256, sha384, sha512, ripemd128, ripemd160, tiger128, tiger160, tiger192, crc32, crc32b. |
| #[IsMimeType] | Checks if the string matches to a valid MIME type format |
| #[IsSemVer] | Checks if the string is a Semantic Versioning Specification (SemVer). |
| #[IsISSN(?IsISSNOptions $options)] | Checks if the string is a ISSN. |
| #[IsISRC] | Checks if the string is a ISRC. |
| #[IsRFC3339] | Checks if the string is a valid RFC 3339 date. |
| #[IsStrongPassword(?IsStrongPasswordOptions $options)] | Checks if the string is a strong password. |
| Array validation attributes | |
| #[ArrayContains(array $values)] | Checks if array contains all values from the given array of values. |
| #[ArrayNotContains(array $values)] | Checks if array does not contain any of the given values. |
| #[ArrayNotEmpty] | Checks if given array is not empty. |
| #[ArrayMinSize(int $min)] | Checks if the array's length is greater than or equal to the specified number. |
| #[ArrayMaxSize(int $max)] | Checks if the array's length is less or equal to the specified number. |
| #[ArrayUnique(?callable $identifier)] | Checks if all array's values are unique. Comparison for objects is reference-based. Optional function can be speciefied which return value will be used for the comparsion. |
| Object validation attributes | |
| #[IsInstance(mixed $value)] | Checks if the property is an instance of the passed value. |
| Other attributes | |
| #[Allow] | Prevent stripping off the property when no other constraint is specified for it. |
If the validate() method returns false, you can use the getErrors() method to retrieve an array of error messages.
if (!$isValid)
{
$errors = $validator->getErrors();
// handle errors
}For more information on how to use this package, please see the full documentation. Thank you for using the AssegaiPHP.
