📖 Scenario: You are building a simple Laravel form to register users. You want to ensure the username is unique and only contains letters and numbers.
🎯 Goal: Create a custom validation rule in Laravel that checks if a username contains only letters and numbers, then apply it to a form request.
📋 What You'll Learn
Create a custom validation rule class named AlphaNumOnly
Add a passes method that returns true only if the username contains letters and numbers
Add a message method that returns a custom error message
Use the custom rule in a form request validation for the username field
💡 Why This Matters
🌍 Real World
Custom validation rules help enforce specific business logic on user input beyond built-in rules, improving data quality and user experience.
💼 Career
Laravel developers often create custom validation rules to meet unique application requirements and maintain clean, reusable validation code.
Progress0 / 4 steps
1
Create the custom validation rule class
Create a Laravel custom validation rule class named AlphaNumOnly using the artisan command php artisan make:rule AlphaNumOnly.
Laravel
Hint
Use the artisan command to create the rule class, then implement passes and message methods.
2
Add a form request class for user registration
Create a Laravel form request class named RegisterUserRequest using the artisan command php artisan make:request RegisterUserRequest.
Laravel
Hint
Use the artisan command to create the form request class.
3
Add validation rules to the form request
In the RegisterUserRequest class, add a rules method that returns an array with the username field using the required, unique:users,username, and the custom AlphaNumOnly rule.
Laravel
Hint
Return an array with the username key and the required validation rules including the custom rule.
4
Use the form request in the controller
In your UserController, update the store method to accept the RegisterUserRequest as a parameter and use it to validate the incoming request.
Laravel
Hint
Use the form request as a parameter and call User::create with the validated data.
Practice
(1/5)
1. What is the main purpose of creating a custom validation rule in Laravel?
easy
A. To define your own logic for validating data beyond built-in rules
B. To change the database schema automatically
C. To create new database tables
D. To generate HTML forms automatically
Solution
Step 1: Understand Laravel validation rules
Laravel provides built-in rules but sometimes you need to check data in a way not covered by them.
Step 2: Purpose of custom validation rules
Custom rules let you write your own logic to validate data exactly as you want.
Final Answer:
To define your own logic for validating data beyond built-in rules -> Option A
Quick Check:
Custom validation = custom logic [OK]
Hint: Custom rules check data your way, not Laravel's default [OK]
Common Mistakes:
Thinking custom rules change database structure
Confusing validation with form generation
Assuming custom rules create tables
2. Which method must you implement in a Laravel custom validation rule class to check if the data passes validation?
easy
A. check
B. message
C. validate
D. passes
Solution
Step 1: Recall custom rule methods
Laravel custom validation rules require two methods: passes and message.
Step 2: Identify method for validation logic
The passes method contains the logic to decide if the data is valid or not.
Final Answer:
passes -> Option D
Quick Check:
passes() checks data validity [OK]
Hint: passes() returns true/false for validation [OK]
Common Mistakes:
Using message() to check data validity
Assuming validate() or check() are required methods
Confusing method names
3. Given this custom rule class snippet, what will $rule->passes('age', 17) return?
class AdultRule implements \Illuminate\Contracts\Validation\Rule {
public function passes($attribute, $value) {
return $value >= 18;
}
public function message() {
return 'You must be an adult.';
}
}
medium
A. true
B. Throws an error
C. false
D. null
Solution
Step 1: Understand the passes method logic
The method returns true if the value is 18 or more, false otherwise.
Step 2: Evaluate passes with value 17
Since 17 is less than 18, the method returns false.
Final Answer:
false -> Option C
Quick Check:
17 < 18 means passes() = false [OK]
Hint: Check condition in passes() with given value [OK]
Common Mistakes:
Assuming 17 passes as adult
Thinking passes() throws error for numbers
Confusing message() with passes()
4. What is wrong with this custom validation rule class?
class EvenNumberRule implements \Illuminate\Contracts\Validation\Rule {
public function passes($attribute, $value) {
return $value % 2 == 0
}
public function message() {
return 'The number must be even.';
}
}
medium
A. message method should return a boolean
B. Missing semicolon after return statement in passes method
C. passes method should accept only one parameter
D. Class must extend a base validation class
Solution
Step 1: Check syntax in passes method
The return statement lacks a semicolon at the end, causing a syntax error.
Step 2: Verify other method signatures
message() correctly returns a string, passes() correctly has two parameters, and implementing the interface is enough.
Final Answer:
Missing semicolon after return statement in passes method -> Option B
Quick Check:
Missing semicolon = syntax error [OK]
Hint: Look for missing semicolons in PHP code [OK]
Common Mistakes:
Thinking message() must return boolean
Assuming passes() takes one parameter
Believing class must extend base class
5. You want to create a custom validation rule that checks if a string contains only vowels. Which approach correctly implements the passes method?
hard
A. return preg_match('/^[aeiouAEIOU]+$/', $value) === 1;
B. return strlen($value) > 0 && ctype_alpha($value);
C. return strpos($value, 'aeiou') !== false;
D. return $value == strtolower($value);
Solution
Step 1: Understand the requirement
The string must contain only vowels (a, e, i, o, u) in any case.
Step 2: Analyze each option
return preg_match('/^[aeiouAEIOU]+$/', $value) === 1; uses regex to check if the string contains only vowels from start to end. return strlen($value) > 0 && ctype_alpha($value); checks only letters but not vowels. return strpos($value, 'aeiou') !== false; checks if 'aeiou' substring exists, which is incorrect. return $value == strtolower($value); checks if string is lowercase, unrelated to vowels.
Final Answer:
return preg_match('/^[aeiouAEIOU]+$/', $value) === 1; -> Option A
Quick Check:
Regex matching only vowels = correct passes() [OK]
Hint: Use regex to match only vowels in string [OK]
Common Mistakes:
Using ctype_alpha without vowel check
Checking substring instead of full string
Confusing case check with vowel check
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.