PHP preg_match不接受换行符

时间:2019-07-04 18:34:42

标签: php regex preg-match

我正在尝试从textarea接收值,我需要允许它接受换行符。

我已经在模式之后尝试过/ 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 个答案:

答案 0 :(得分:4)

由于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']);

但是,如果您希望保留原始代码,则只需在字符类中添加\\\\即可得出文字反斜杠。