正则表达式白名单问题

发布于 2024-09-16 16:25:29 字数 245 浏览 7 评论 0原文

我有点困惑。我通过我编写的基本清理函数运行所有输入,只允许某些字符,但仍然允许使用诸如 [] 之类的字符。

function sanitize($input) {
$pattern = "/[^a-zA-z0-9_-]/";
$filtered = preg_replace($pattern, "", $input);
return $filtered;}

知道为什么要这样做吗?

I'm a little confused. I am running all my inputs through a basic sanitize function I write to only allow certain characters, but characters such as [] are still being allowed.

function sanitize($input) {
$pattern = "/[^a-zA-z0-9_-]/";
$filtered = preg_replace($pattern, "", $input);
return $filtered;}

Any idea why it's doing that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

最好是你 2024-09-23 16:25:29

您的模式字符串中有一个拼写错误,导致了问题

/[^a-zA-z0-9_-]

You want A-Z instead.


:您可能对字符类 [:alnum:] 和/或 PCRE_CASELESS 修饰符

You have a typo in your pattern string that's causing the problem

/[^a-zA-z0-9_-]

You want A-Z instead.


btw: you might be interested in the character class [:alnum:] and/or the PCRE_CASELESS modifier

眼藏柔 2024-09-23 16:25:29

添加到其他人的答案。

[a-zA-Z0-9_]\w 相同,一个单词字符。

所以 [^a-zA-Z0-9_-] 可以写成 [^\w-]

Adding to others answers.

[a-zA-Z0-9_] is same as \w, a word char.

So [^a-zA-Z0-9_-] can be written as [^\w-]

债姬 2024-09-23 16:25:29

您必须将第二个“z”大写:“/[^a-zA-Z0-9_-]/”

You have to capitalize the second "z": "/[^a-zA-Z0-9_-]/"

梨涡少年 2024-09-23 16:25:29

不过,不要想当然地认为 [a-zA-Z0-9_]\w 相同。在 http://se.php.net/manual/en/regexp .reference.escape.php 它表示 \w “如果发生特定于区域设置的匹配,则可能会有所不同”。

Don't take for granted that [a-zA-Z0-9_] is the same as \w, though. On http://se.php.net/manual/en/regexp.reference.escape.php it says that \w "may vary if locale-specific matching is taking place".

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文