Skip to main content

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:
By default, required fields show an asterisk. You can hide it:

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