PHP preg_match не принимает разрыв строки - PullRequest
1 голос
/ 04 июля 2019

Я пытаюсь получить значение из текстовой области, и мне нужно разрешить ему принимать переносы строк.

Я уже пробовал / s и / m флаги после шаблона. Также есть исключения \ r \ n и \ s.

Ничто из вышеперечисленного не заставило его работать.

$description = mysqli_real_escape_string($conn, $_POST['description']);


if(!preg_match("/^[\r\n\/a-z A-ZáéíóúàèìòùãõâêîôûÁÉÍÓÚÀÈÌÒÙÃÕÂÊÎÔÛçÇ 0-9 \- \_ \s \. ,]*$/", $description)) {

   header("Location: index.php?error=invalidDescription");
   exit();

}

Я ожидаю, что он примет разрыв строки.

1 Ответ

4 голосов
/ 05 июля 2019

Поскольку mysqli_real_escape_string экранирует разрывы строк, в вашей строке больше нет разрывов строк.Класс символов в вашем шаблоне не включает обратную косую черту, поэтому шаблон не работает.

Самое простое решение - применить mysqli_real_escape_string после шаблона.Я напишу это так:

if ( preg_match('~[^\p{Latin}0-9/\s.,_-]~u', $_POST['description']) ) {
    header("Location: index.php?error=invalidDescription");
    exit();
}

$description = mysqli_real_escape_string($conn, $_POST['description']);

Но если вы предпочитаете сохранить свой исходный код, вам нужно всего лишь добавить \\\\ в свой класс символов, чтобы получить буквальную обратную косую черту.

...