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
}
方括号内的$
转义还是不转义?
在这种情况下,您不需要使用 \
转义 $
。如果你需要它们作为字符而不是正则表达式字符,你可以总是转义正则表达式字符:. \ + * ? [ ^ ] $ ( ) { } = ! < > | : -
试试这个:
preg_match("/^[a-zA-Z0-9\-_$]+$/", $input);
在 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
}
方括号内的$
转义还是不转义?
在这种情况下,您不需要使用 \
转义 $
。如果你需要它们作为字符而不是正则表达式字符,你可以总是转义正则表达式字符:. \ + * ? [ ^ ] $ ( ) { } = ! < > | : -
试试这个:
preg_match("/^[a-zA-Z0-9\-_$]+$/", $input);