php preg_match utf-8 странное поведение - PullRequest
2 голосов
/ 05 сентября 2010

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

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

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

Все работает нормально, ЗА ИСКЛЮЧЕНИЕМ в конце входной строки указан символ не ascii (например, é).Тогда моя проверка не пройдена, но не должна.Я знаю, что это может быть глупой ошибкой, но заранее спасибо за каждое предложение.

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

Ответы [ 2 ]

2 голосов
/ 05 сентября 2010

Попробуйте Свойства символов Unicode :

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

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

1 голос
/ 05 сентября 2010

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

...