регулярка на поиск букв

Хочу проверить с помощью регулярок указаны ли в слове только буквы. Регулярка /^[а-яa-z]+$/i, проверочное слово "Тематический". Подскажите пожалуйста что я упускаю. Методом проб смог установить что совокупность символов привязки к началу и концу строки (^$) дают сбой. Указывая их по отдельности, выражение находит совпадение.

<?php
$value = "Тематический";
var_dump(preg_match("/^[а-яa-z]+$/i", $value));

Ответы (2 шт):

Автор решения: Qwertiy

Пропустила букву ё и флаг u: песочница

<?php
$value = "Тематический";
var_dump(preg_match("/^[а-яёa-z]+$/ui", $value));
→ Ссылка
Автор решения: ipatev_nn

Предлагаю такой вариант использовать \p{L} - поддерживает все языки в любом регистре.

Но так как в вопросе кириллица и латинские алфавиты, то следует установить ограничения:
\p{Cyrillic} и \p{Latin}, будут использовать именно буквенные наборы символам, принадлежащих этим языкам.
А ввиду того, что слово не может состоять из букв разных языков, то следует разделить их выбор в логическое или, для этого будем использовать незахватываемую группу (?:...):
(?:\p{Cyrillic}+|\p{Latin}+)

Для ограничения границ слова для латинского языка используется \b, что бы это работало и для кириллицы потребуется установить флаг u регулярному выражению

/\b(?:\p{Cyrillic}+|\p{Latin}+)\b/u

Так же в случае, если в строку будут идти несколько слов, то следует добавить флаг g - глобальный поиск


Так как \b это некий эквивалент позитивного, либо негативного просмотра вперед и назад, ограничения границы слова можно установить самостоятельно

(?<![\p{L}\w])...(?![\p{L}\w])
#^^^^^^^^^^^^^_____________________Негативный просмотр назад
#________________^^^^^^^^^^^^^_____Негативный просмотр вперед

В просмотре назад проверятся, что перед искомым словом исключаются символы любого языка, цифры и буквы, а так же знак _ аналогично и в просмотре вперед, только уже после искомого значения

(?<![\p{L}\w])(?:\p{Cyrillic}+|\p{Latin}+)(?![\p{L}\w])
→ Ссылка