preg匹配不允许撇号/单引号(')

时间:2019-02-18 19:19:01

标签: php regex preg-match

我无法获得pregmatch来接受单引号(')或双引号(“)引号。我正在php中尝试将模式置于“ textarea”中。

我想允许两种引号类型,但都不接受。因此,请停止输入数据库。

我的模式是

pattern="[a-zA-Z0-9.,()'!?:"\s]"

我的预赛是

!preg_match("/^[a-zA-Z0-9.,()'!?:"\s]*$/", $description)

我已经搜索并尝试了所有内容。

当我尝试这个

"/^['\a-zA-Z0-9.,()!?:\s]*$/"

它返回丽莎的而不是丽莎的

2 个答案:

答案 0 :(得分:0)

Filter the input,然后运行检查以确保您没有存储malicious bit of HTML or Javascript, or a tag breaker。然后,一旦您进入binding your parameters with PDO进行插入,请将其表示为PARAM_STR

$description = filter_input(INPUT_POST,'description',FILTER_SANITIZE_STRING);

    if(preg_match("~^[a-zA-Z0-9.,()\"'!?:\s]*$~", $description)){
       //Call functions to prepare statements and insert into db here.
       //...
       $stmt->bindValue(':description', $description, PDO::PARAM_STR);
    }

答案 1 :(得分:0)

由于您的preg匹配现在允许单引号,因此在插入数据库之前,请保留它并删除斜杠。

尝试一下:

!preg_match("/^['\a-zA-Z0-9.,()!?:\s]*$/", $description))

然后在将参数绑定到准备好的语句中之前,添加以下代码行:

  $description = stripslashes(htmlentities($description));

@John Conde是正确的。确保始终使用准备好的语句并绑定参数。

希望这很有帮助