php preg_match 函数转义撇号

php preg_match function escaping apostrophize

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

所以我的结果代码是:

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

它工作得很好,除了撇号字符 ' 和 ",如果字符串包含这两个字符之一,它应该无法通过验证,但事实并非如此。我想我的正则表达式模式结构不合理,但我在这里找不到问题。

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

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

demo: https://ideone.com/3mZD3L


方括号内的$转义还是不转义?

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

试试这个:

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