Skip to main content
Version: 3.0

Text input

Overview

The text input allows you to interact with a string:

use Filament\Forms\Components\TextInput;

TextInput::make('name')
Text input

Setting the HTML input type

You may set the type of string using a set of methods. Some, such as email(), also provide validation:

use Filament\Forms\Components\TextInput;

TextInput::make('text')
->email() // or
->numeric() // or
->password() // or
->tel() // or
->url()

You may instead use the type() method to pass another HTML input type:

use Filament\Forms\Components\TextInput;

TextInput::make('backgroundColor')
->type('color')

Setting the HTML input mode

You may set the inputmode attribute of the input using the inputMode() method:

use Filament\Forms\Components\TextInput;

TextInput::make('text')
->numeric()
->inputMode('decimal')

Setting the numeric step

You may set the step attribute of the input using the step() method:

use Filament\Forms\Components\TextInput;

TextInput::make('number')
->numeric()
->step(100)

Autocompleting text

You may allow the text to be autocompleted by the browser using the autocomplete() method:

use Filament\Forms\Components\TextInput;

TextInput::make('password')
->password()
->autocomplete('new-password')

As a shortcut for autocomplete="off", you may use autocomplete(false):

use Filament\Forms\Components\TextInput;

TextInput::make('password')
->password()
->autocomplete(false)

For more complex autocomplete options, text inputs also support datalists.

Autocompleting text with a datalist

You may specify datalist options for a text input using the datalist() method:

TextInput::make('manufacturer')
->datalist([
'BWM',
'Ford',
'Mercedes-Benz',
'Porsche',
'Toyota',
'Tesla',
'Volkswagen',
])

Datalists provide autocomplete options to users when they use a text input. However, these are purely recommendations, and the user is still able to type any value into the input. If you're looking to strictly limit users to a set of predefined options, check out the select field.

Autocapitalizing text

You may allow the text to be autocapitalized by the browser using the autocapitalize() method:

use Filament\Forms\Components\TextInput;

TextInput::make('name')
->autocapitalize('words')

Adding affix text aside the field

You may place text before and after the input using the prefix() and suffix() methods:

use Filament\Forms\Components\TextInput;

TextInput::make('domain')
->prefix('https://')
->suffix('.com')
Text input with affixes

Using icons as affixes

You may place an icon before and after the input using the prefixIcon() and suffixIcon() methods:

use Filament\Forms\Components\TextInput;

TextInput::make('domain')
->url()
->suffixIcon('heroicon-m-globe-alt')
Text input with suffix icon

Input masking

Input masking is the practice of defining a format that the input value must conform to.

In Filament, you may use the mask() method to configure an Alpine.js mask:

use Filament\Forms\Components\TextInput;

TextInput::make('birthday')
->mask('99/99/9999')
->placeholder('MM/DD/YYYY')

To use a dynamic mask, wrap the JavaScript in a RawJs object:

use Filament\Forms\Components\TextInput;
use Filament\Support\RawJs;

TextInput::make('cardNumber')
->mask(RawJs::make(<<<'JS'
$input.startsWith('34') || $input.startsWith('37') ? '9999 999999 99999' : '9999 9999 9999 9999'
JS))

Text input validation

As well as all rules listed on the validation page, there are additional rules that are specific to text inputs.

Length validation

You may limit the length of the input by setting the minLength() and maxLength() methods. These methods add both frontend and backend validation:

use Filament\Forms\Components\TextInput;

TextInput::make('name')
->minLength(2)
->maxLength(255)

You can also specify the exact length of the input by setting the length(). This method adds both frontend and backend validation:

use Filament\Forms\Components\TextInput;

TextInput::make('code')
->length(8)

Size validation

You may validate the minimum and maximum value of a numeric input by setting the minValue() and maxValue() methods:

use Filament\Forms\Components\TextInput;

TextInput::make('number')
->numeric()
->minValue(1)
->maxValue(100)

Phone number validation

When using a tel() field, the value will be validated using: /^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\s\.\/0-9]*$/.

If you wish to change that, then you can use the telRegex() method:

use Filament\Forms\Components\TextInput;

TextInput::make('phone')
->tel()
->telRegex('/^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\s\.\/0-9]*$/')

Alternatively, to customize the telRegex() across all fields, use a service provider:

use Filament\Forms\Components\TextInput;

TextInput::configureUsing(function (TextInput $component): void {
$component->telRegex('/^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\s\.\/0-9]*$/');
});