Предполагая, что вы хотите сопоставить буквы, тогда разрешение символов Unicode должно помочь:
Используйте /\p{L}+/u
, например, если вы хотите сопоставить последовательность букв. Не забудьте модификатор /u
(Unicode).
В вашем случае:
return preg_match('|^[0-9\p{L}_\s-]*$|u', $value);
должно работать.
Кроме того, вероятно, не стоит использовать |
в качестве разделителя регулярных выражений. Для текущего регулярного выражения /
вполне подойдет; другие альтернативы ~
или #
, потому что они редко встречаются в тексте и не имеют никакого специального значения в регулярных выражениях.