Introduction
Filament provides both frontend and backend validation for forms. Unlike traditional Laravel validation that uses string-based rules like'required|max:255', Filament uses chainable methods that provide IDE autocompletion and immediate feedback to users.
Adding validation rules
Validation rules are added to fields using dedicated methods:Available validation rules
Required
Make a field required:Conditional required
String length
Numeric values
String formats
IP addresses
MAC address
Hex color
JSON
Date validation
String patterns
Regex patterns
Field comparison
List validation
Database validation
Enum validation
Prohibited fields
Custom validation rules
You can add custom Laravel validation rules:Using rule classes
Using closure rules
Accessing other field values
Using Laravel validation rules
You can use any Laravel validation rule:Customizing validation messages
Custom error messages
Custom validation attributes
Change the field name used in error messages:Allowing HTML in messages
Real-time validation patterns
Validate on blur
Validate while typing (debounced)
Validate immediately
Common validation patterns
Password confirmation
Email with confirmation
Conditional validation based on other fields
Date range validation
File upload validation
Price validation
URL validation
Disabling validation
Prevent validation on fields that aren’t saved:Best practices
Frontend vs backend validation
- Use Filament’s validation methods for immediate user feedback
- Always validate on the backend as well for security
- Use
live()strategically to balance UX and performance
Error messages
- Provide clear, actionable error messages
- Customize messages for better UX
- Be specific about what’s wrong and how to fix it
Performance
- Use
live(onBlur: true)for text inputs to avoid excessive requests - Use
live(debounce: 500)for real-time validation with typing - Avoid validating on every keystroke unless necessary
Accessibility
- Required fields should be clearly marked
- Error messages should be descriptive
- Use
validationAttribute()for user-friendly field names
Next steps
- Advanced Features - Learn about reactive and dependent fields
- Fields - Explore all available form fields