php preg match utf-8 странное поведение


Я ищу в интернете, но не могу найти правильный ответ, поэтому я пытаюсь таким образом.

Я использую этот код для проверки ввода UTF-8. Я хочу разрешить печатные символы и некоторые определенные специальные символы.

$pattern = '/[^w.-s,&!?()+_:;]+$/u';
$status = @preg_match($pattern, $value);
if (($status === false) || ($status > 0)) {
    return false;
}

Все работает нормально, за исключением того, что входная строка имеет в конце не ascii символ (например. ми). Тогда моя проверка терпит неудачу, но она не должна. Я знаю, что это может быть глупой ошибкой, но заранее благодарю за каждое предложение.

С наилучшими пожеланиями

2 2

2 ответа:

Попробуйте свойства символов Юникода:

/[^\p{L}.\-\s,&!?()+_:;]+$/u

Здесь \p{L} представляет любой символ Юникода, который классифицируется как буква.

Используйте \pL для сопоставления любого буквенного символа