验证用户输入的字符串仅包含字母、数字和下划线
$page = $_GET['page'];
if (isset($page))
if (!preg_match('/[\w\d_]+/i', $page))
die("Error");
我想允许字母和下划线。
我上面的代码有效,但假设我设置了 123...
,这也有效。
preg_match()
是否无法在匹配后验证尾随字符?
$page = $_GET['page'];
if (isset($page))
if (!preg_match('/[\w\d_]+/i', $page))
die("Error");
I want to allow alphanum and underscore.
My above code works, but let say I set 123...
, this works too.
Is preg_match()
not able to validate trailing characters after the match?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
只要字母数字作为
$page
的子字符串出现,正则表达式就会匹配。由于123...
包含子字符串123
,它将传递您的正则表达式。用于
匹配整个字符串。 (
\w
已经意味着[a-zA-Z0-9_]
所以你的\d
、_
和i
修饰符是多余的。)The regex will match as long as an alphanumeric appears as a substring of
$page
. Since123...
contains the substring123
it will pass your regex.Use
to match the whole string. (
\w
already means[a-zA-Z0-9_]
so your\d
,_
and thei
modifier are redundant.)您需要使用锚点:
\w
已经有\d
和_
You need to use anchors as:
\w
already has\d
and_