php preg_match函数转义撇号

时间:2018-08-10 23:05:11

标签: php php-7.2

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

  • 至少在字符长度上
  • 仅包含字母数字,破折号,下划线和美元符号(-_ $)

所以我得到的代码是:

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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


我应该逃脱方括号内的$吗?

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

答案 1 :(得分:0)

尝试一下:

preg_match("/^[a-zA-Z0-9\-_\$]+$/", $input);