在php中,我以以下方式验证字符串:
所以我得到的代码是:
if(!preg_match("/[a-zA-Z0-9\-_\$]+/", $input))
abort(400);
// else continues
除了撇号字符'和'以外,它的工作情况都很好,如果字符串包含这两个字符之一,则应该无法通过验证,但事实并非如此。我认为我的正则表达式模式没有很好的结构,但是我在这里找不到问题。
答案 0 :(得分:1)
您仅检查字符是否存在于字符串中的任何位置(在这种情况下为Hello
)。您需要使用字符串的开始(^
)和结束($
)进行正则表达式:
if (!preg_match("/^[a-zA-Z0-9\-_$]+$/", 'Hello"')) {
abort(400);
} else {
//continues
}
我应该逃脱方括号内的$
吗?
在这种情况下,您不需要使用$
来转义\
。如果需要将正则表达式char用作字符而不是正则表达式char,则可以始终转义它们:. \ + * ? [ ^ ] $ ( ) { } = ! < > | : -
答案 1 :(得分:0)
尝试一下:
preg_match("/^[a-zA-Z0-9\-_\$]+$/", $input);