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 ответа:
Попробуйте свойства символов Юникода:
/[^\p{L}.\-\s,&!?()+_:;]+$/u
Здесь
\p{L}
представляет любой символ Юникода, который классифицируется как буква.