我正在尝试使用preg_match将用户名列入白名单字符并将其屏蔽掉,但是代码并不像我喜欢的那样
这是:
PHP
$username = "karl#";
if (!preg_match("#^[a-zA-Z0-9]+$#", $username))
{
$msg = "You may not use special characters in your username";
}
else {
$msg = "ok";
}
返回"确定"。换句话说,它让卡尔#通过。我希望它返回错误信息。
我是否误用了比赛或我做错了什么?感谢您的任何建议。
编辑:上面的代码确实有效。错误是因为在原始版本中我没有对用户名进行硬编码,而是将其作为帖子进行处理,并且发布时出现问题。我使用^ \ w + $接受了下面的答案,因为它允许使用下划线并且更简洁。还要感谢评论中包含的正则表达式的所有优点。
答案 0 :(得分:1)
您可以使用此正则表达式:
^\w+$
<强> Working demo 强>
正如Barmar在评论中指出的那样,这也会允许下划线,但如果你不想要它们,那么你的正则表达式就可以了:
^[a-zA-Z0-9]+$
你需要用标志来帮助正则表达式:
$re = "/^[a-zA-Z0-9]+$/m";
$username = "karl#"; ^----Notice the multiline flag
你也可以使用:
$re = "/^[a-z0-9]+$/mi";
^---- Case Insensitive flag
答案 1 :(得分:0)
根据评论修改,我为模式添加了分隔符:
工作版
<?php
$username = "karl";
if (preg_match("/[^a-zA-Z0-9]/", $username))
{
$msg = "You may not use special characters in your username";
}
else {
$msg = "ok";
}
echo $msg;
?>
将非字符放在范围括号内。