Правило alpha_num
Правило alpha_num используется для валидации полей формы и гарантирует, что значение содержит только буквы латинского алфавита и цифры. При этом пробелы, дефисы, подчёркивания и другие специальные символы не допускаются. Правило применяется в массиве правил валидации, передаваемых в метод validate или в метод rules класса FormRequest.
Синтаксис
Правило указывается в виде строки:
<?php
'field_name' => 'alpha_num'
?>
или с использованием класса Rule:
<?php
use Illuminate\Validation\Rule;
'field_name' => Rule::alphaNum()
?>
Пример использования в контроллере
Давайте проверим, что поле 'username' содержит только латинские буквы и цифры:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class UserController extends Controller
{
public function store(Request $request)
{
$validated = $request->validate([
'username' => 'required|alpha_num|max:20',
'email' => 'required|email',
]);
// Сохранение пользователя
return response()->json(['success' => true]);
}
}
?>
Пример с допустимыми значениями
Проверим, какие строки успешно проходят валидацию:
<?php
use Illuminate\Support\Facades\Validator;
$values = ['user123', 'admin', 'test12345', 'user_123'];
foreach ($values as $value) {
$validator = Validator::make(
['field' => $value],
['field' => 'alpha_num']
);
$res = $validator->passes() ? 'valid' : 'invalid';
echo "$value: $res\n";
}
?>
Результат выполнения кода:
"user123: valid"
"admin: valid"
"test12345: valid"
"user_123: invalid"
Обратите внимание, что значение 'user_123' не прошло валидацию, так как содержит символ подчёркивания.
Пример с использованием FormRequest
Создадим отдельный класс запроса для валидации данных пользователя:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UserRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'username' => 'required|alpha_num|min:3|max:20',
'password' => 'required|min:8',
];
}
}
?>
Теперь используем этот запрос в контроллере:
<?php
namespace App\Http\Controllers;
use App\Http\Requests\UserRequest;
class UserController extends Controller
{
public function store(UserRequest $request)
{
$validated = $request->validated();
// Сохранение пользователя
return response()->json(['success' => true]);
}
}
?>
Пример с использованием Rule::alphaNum
Используем класс Rule для более читаемой записи правила:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
use Illuminate\Support\Facades\Validator;
class UserController extends Controller
{
public function update(Request $request, $id)
{
$validator = Validator::make($request->all(), [
'username' => [
'required',
Rule::alphaNum(),
'max:20',
],
]);
if ($validator->fails()) {
return response()->json($validator->errors(), 422);
}
// Обновление пользователя
return response()->json(['success' => true]);
}
}
?>
Пример с локализацией сообщений об ошибках
Настроим кастомное сообщение для правила alpha_num:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UserRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'username' => 'required|alpha_num|min:3|max:20',
];
}
public function messages()
{
return [
'username.alpha_num' => 'Логин должен содержать только латинские буквы и цифры.',
];
}
}
?>
Смотрите также
-
правило
alpha,
которое проверяет только буквы (без цифр) -
правило
alpha_dash,
которое также разрешает дефисы и подчёркивания -
правило
numeric,
которое проверяет числовые значения -
правило
string,
которое проверяет строковые значения