首页 > 解决方案 > php preg_match 函数转义撇号

问题描述

在 php 中,我正在以如下方式验证字符串:

所以我的结果代码是:

if(!preg_match("/[a-zA-Z0-9\-_\$]+/", $input))
     abort(400);
// else continues

除了撇号字符 ' 和 " 之外,它工作得很好,如果字符串包含这两个字符之一,它应该无法通过验证,但这不是正在发生的事情。我认为我的正则表达式模式不是很好结构化,但我在这里找不到问题。

标签: phpphp-7.2

解决方案


您只检查字符是否存在于字符串中的任何位置(在本例中Hello)。您需要使用字符串的开始(^)和结束($)进行正则表达式:

if (!preg_match("/^[a-zA-Z0-9\-_$]+$/", 'Hello"')) {
   abort(400);
} else {
    //continues
}

演示: https ://ideone.com/3mZD3L


$我应该在方括号内转义还是不转义?

在这种情况下,您不需要转义$with \。如果您需要正则表达式字符而不是正则表达式字符,则可以始终转义它们:. \ + * ? [ ^ ] $ ( ) { } = ! < > | : -


推荐阅读