Rules
ตัวอย่าง Code ในการทำ Validation โดยใช้ Rules
🐶 Email Private Rule
EmailPrivateRule.php
<?php
namespace App\Rules;
use Closure;
use Illuminate\Contracts\Validation\ValidationRule;
class EmailPrivateRule implements ValidationRule
{
/**
* Run the validation rule.
*
* @param \Closure(string): \Illuminate\Translation\PotentiallyTranslatedString $fail
*/
public function validate(string $attribute, mixed $value, Closure $fail): void
{
$domains = [
'nida.ac.th',
'stu.nida.ac.th',
'guest.nida.ac.th',
];
$email = substr(strrchr($value, "@"), 1);
if (!in_array($email, $domains)) {
$fail('The :attribute must be a private email domain.');
}
}
}
🐺 Email Public Rule
EmailPublicRule.php
<?php
namespace App\Rules;
use Closure;
use Illuminate\Contracts\Validation\ValidationRule;
class EmailPublicRule implements ValidationRule
{
/**
* Run the validation rule.
*
* @param \Closure(string): \Illuminate\Translation\PotentiallyTranslatedString $fail
*/
public function validate(string $attribute, mixed $value, Closure $fail): void
{
$domains = [
'gmail.com',
'yahoo.com',
'hotmail.com',
'outlook.com',
'example.com',
];
$email = substr(strrchr($value, "@"), 1);
if (!in_array($email, $domains)) {
$fail('The :attribute must be a public email domain.');
}
}
}
🐱 Expiration Rule
ExpirationRule.php
<?php
namespace App\Rules;
use Closure;
use Illuminate\Contracts\Validation\ValidationRule;
use Carbon\Carbon;
class ExpirationRule implements ValidationRule
{
/**
* Run the validation rule.
*
* @param \Closure(string): \Illuminate\Translation\PotentiallyTranslatedString $fail
*/
protected $current_date;
public function __construct()
{
$this->current_date = Carbon::now()->format('Y-m-d');
}
public function validate(string $attribute, mixed $value, Closure $fail): void
{
if ($this->current_date > $value) {
$fail('The :attribute is expired or not a valid date.');
}
}
}
🦁 Language English Rule
LanguageEnglishRule.php
<?php
namespace App\Rules;
use Closure;
use Illuminate\Contracts\Validation\ValidationRule;
class LanguageEnglishRule implements ValidationRule
{
/**
* Run the validation rule.
*
* @param \Closure(string): \Illuminate\Translation\PotentiallyTranslatedString $fail
*/
public function validate(string $attribute, mixed $value, Closure $fail): void
{
if (!preg_match('/^[a-zA-Z\s]+$/', $value)) {
$fail('The :attribute must contain only English text.');
}
}
}
🐯 Language Thai Rule
LanguageThaiRule.php
<?php
namespace App\Rules;
use Closure;
use Illuminate\Contracts\Validation\ValidationRule;
class LanguageThaiRule implements ValidationRule
{
/**
* Run the validation rule.
*
* @param \Closure(string): \Illuminate\Translation\PotentiallyTranslatedString $fail
*/
public function validate(string $attribute, mixed $value, Closure $fail): void
{
if (!preg_match('/^[\p{Thai} ]+$/u', $value)) {
$fail('The :attribute must contain only Thai text.');
}
}
}
🦊 Lowercase Rule
LowercaseRule.php
<?php
namespace App\Rules;
use Closure;
use Illuminate\Contracts\Validation\ValidationRule;
class LowercaseRule implements ValidationRule
{
/**
* Run the validation rule.
*
* @param \Closure(string): \Illuminate\Translation\PotentiallyTranslatedString $fail
*/
public function validate(string $attribute, mixed $value, Closure $fail): void
{
if (strtolower($value) !== $value) {
$fail('The :attribute must be lowercase.');
}
}
}
🦝 Mobile Phone Rule
MobilePhoneRule.php
<?php
namespace App\Rules;
use Closure;
use Illuminate\Contracts\Validation\ValidationRule;
class MobilePhoneRule implements ValidationRule
{
/**
* Run the validation rule.
*
* @param \Closure(string): \Illuminate\Translation\PotentiallyTranslatedString $fail
*/
public function validate(string $attribute, mixed $value, Closure $fail): void
{
if (!is_numeric($value) && strlen($value) !== 10) {
$fail('The :attribute must be a 10-digit number.');
}
}
}
🐮 Repeat Password Rule
RepeatPasswordRule.php
<?php
namespace App\Rules;
use Closure;
use Illuminate\Contracts\Validation\ValidationRule;
class RepeatPasswordRule implements ValidationRule
{
/**
* Run the validation rule.
*
* @param \Closure(string): \Illuminate\Translation\PotentiallyTranslatedString $fail
*/
public function __construct($password)
{
$this->password = $password;
}
public function validate(string $attribute, mixed $value, Closure $fail): void
{
if ($value !== $this->password) {
$fail('The password confirmation does not match.');
}
}
}
🐷 Strong Password Rule
StrongPasswordRule.php
<?php
namespace App\Rules;
use Closure;
use Illuminate\Contracts\Validation\ValidationRule;
class StrongPasswordRule implements ValidationRule
{
/**
* Run the validation rule.
*
* @param \Closure(string): \Illuminate\Translation\PotentiallyTranslatedString $fail
*/
public function validate(string $attribute, mixed $value, Closure $fail): void
{
if (!preg_match('/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/', $value)) {
$fail('The :attribute must be at least 8 characters long and contain at least one uppercase letter, one lowercase letter, one number, and one special character.');
}
}
}
🐗 Student Code Rule
StudentCodeRule.php
<?php
namespace App\Rules;
use Closure;
use Illuminate\Contracts\Validation\ValidationRule;
class StudentCodeRule implements ValidationRule
{
/**
* Run the validation rule.
*
* @param \Closure(string): \Illuminate\Translation\PotentiallyTranslatedString $fail
*/
public function validate(string $attribute, mixed $value, Closure $fail): void
{
if (!is_numeric($value) && strlen($value) !== 10) {
$fail('The :attribute must be a 10-digit number.');
}
}
}
🐹 Upload File Rule
UploadFileRule.php
<?php
namespace App\Rules;
use Closure;
use Illuminate\Contracts\Validation\ValidationRule;
class UploadFileRule implements ValidationRule
{
/**
* Run the validation rule.
*
* @param \Closure(string): \Illuminate\Translation\PotentiallyTranslatedString $fail
*/
public function __construct($maxsize, $allow_filetype)
{
$this->maxsize = $maxsize;
$this->allow_filetype = $allow_filetype;
}
public function validate(string $attribute, mixed $value, Closure $fail): void
{
if ($value->getSize() > $this->maxsize * 1024) {
$fail('The file must not exceed ' . $this->maxsize . ' KB.');
} elseif (!in_array($value->getClientOriginalExtension(), $this->allow_filetype)) {
$fail('The file must be one of the following types: ' . implode(', ', $this->allow_filetype));
}
}
}
🐰 Uppercase Rule
UppercaseRule.php
<?php
namespace App\Rules;
use Closure;
use Illuminate\Contracts\Validation\ValidationRule;
class UppercaseRule implements ValidationRule
{
/**
* Run the validation rule.
*
* @param \Closure(string): \Illuminate\Translation\PotentiallyTranslatedString $fail
*/
public function validate(string $attribute, mixed $value, Closure $fail): void
{
if (strtoupper($value) !== $value) {
$fail('The :attribute must be uppercase.');
}
}
}
Last updated