Как проверить, является ли строка палиндромом
Короткий ответ
Сравните строку с ней же, записанной наоборот:
<?php
var_dump('level' === strrev('level'));
var_dump('hello' === strrev('hello'));Результат:
bool(true)
bool(false)Фраза с пробелами и знаками
Оставьте только буквы и цифры и приведите их к нижнему регистру:
<?php
function isPalindrome(string $text): bool
{
$clean = mb_strtolower(preg_replace('/[^\p{L}\p{N}]/u', '', $text));
$chars = mb_str_split($clean);
return $chars === array_reverse($chars);
}
var_dump(isPalindrome('A man, a plan, a canal: Panama'));
var_dump(isPalindrome('А роза упала на лапу Азора'));Результат:
bool(true)
bool(true)Функции из этого ответа
- strrev — Переворачивает строку.
- mb_str_split — Разбивает строку на символы с учётом любого алфавита.
- preg_replace — Заменяет всё, что подошло под регулярное выражение.