nanopkg/laravel-bd-phone-verification-rule
Installation:
composer require nanopkg/laravel-bd-phone-verification-rule
No additional configuration is required—this package registers its validation rule automatically.
First Use Case: Validate a Bangladesh phone number in a form request:
use Illuminate\Http\Request;
public function store(Request $request)
{
$request->validate([
'phone' => 'required|bdPhone', // Validates Bangladesh phone format
]);
}
Where to Look First:
bdPhone rule validates formats like 01XXXXXXXX (11 digits, starting with 01), +8801XXXXXXXX, or 8801XXXXXXXX."The phone number is not a valid Bangladesh phone number." (customizable via addCustomAttributes() or mergeCustomAttributes()).Form Validation:
// In a FormRequest or controller
$validated = $request->validate([
'user_phone' => 'required|bdPhone',
'admin_phone' => 'nullable|bdPhone',
]);
Dynamic Validation: Use the rule directly in custom validation logic:
use Nanopkg\BdPhoneVerificationRule\Rules\BdPhone;
$validator = Validator::make($data, [
'phone' => ['required', new BdPhone],
]);
API Requests: Validate phone numbers in API payloads (e.g., Laravel Sanctum or Passport):
$request->validate([
'phone' => 'required|bdPhone',
]);
Model Rules: Attach validation to Eloquent models:
use Illuminate\Validation\Rule;
public function rules()
{
return [
'phone' => ['required', 'bdPhone'],
];
}
'custom' => [
'bdPhone' => [
'required' => 'The :attribute is required.',
'bdPhone' => 'The :attribute must be a valid Bangladesh phone number.',
],
],
$request->validate([
'phone' => 'required|bdPhone|unique:users,phone',
]);
$this->assertTrue((new BdPhone)->passes('01712345678'));
$this->assertFalse((new BdPhone)->passes('9876543210'));
Format Strictness:
01 prefix (e.g., 1712345678).+880-1712345678 (use +8801712345678 instead).017-12345678).numeric rule:
$request->validate(['phone' => 'required|numeric|bdPhone']);
Edge Cases:
01 prefix.
$phone = (string) $request->phone; // Force string type
$request->validate(['phone' => 'required|bdPhone|trim']);
Customization Limits:
01X or +880X variants requires forking the package).$rule = new \Nanopkg\BdPhoneVerificationRule\Rules\BdPhone;
if (!$rule->passes('invalid_phone')) {
echo $rule->message(); // Debug error message
}
dd($request->phone) to verify the raw input before validation.Custom Error Messages:
Override globally in AppServiceProvider:
Validator::extend('bdPhone', function ($attribute, $value, $parameters, $validator) {
return (new BdPhone)->passes($value);
});
Validator::replacer('bdPhone', function ($message, $attribute, $rule, $parameters) {
return 'Custom error for ' . $attribute;
});
Pre-Validation:
Sanitize input in a Filter or Request macro:
Request::macro('sanitizeBdPhone', function () {
return str_replace([' ', '-', '+'], '', $this->phone);
});
Then use:
$request->validate(['phone' => 'required|bdPhone', 'sanitizeBdPhone']);
Testing Edge Cases: Write tests for:
01712345678, +8801712345678, 8801712345678.1712345678, 0123456789, abcdefghijk.How can I help you explore Laravel packages today?