регулярка на поиск букв
Хочу проверить с помощью регулярок указаны ли в слове только буквы. Регулярка /^[а-яa-z]+$/i, проверочное слово "Тематический". Подскажите пожалуйста что я упускаю. Методом проб смог установить что совокупность символов привязки к началу и концу строки (^$) дают сбой. Указывая их по отдельности, выражение находит совпадение.
<?php
$value = "Тематический";
var_dump(preg_match("/^[а-яa-z]+$/i", $value));
Ответы (2 шт):
Пропустила букву ё и флаг u: песочница
<?php
$value = "Тематический";
var_dump(preg_match("/^[а-яёa-z]+$/ui", $value));
Предлагаю такой вариант использовать \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])