我想在PHP中使用以下正则表达式检查是否存在任何非法字符。基本上,我想只允许使用字母数字和下划线(_)。不幸的是,下面的代码似乎没有正常工作。如果字符串$ username中有任何非法字符,则应返回true。但是,它仍然允许字符串中的任何字符。知道正则表达式有什么问题吗?
if ( !preg_match("/^[-a-z0-9_]/i", $username) )
{
return true;
}
提前致谢。
答案 0 :(得分:15)
您的代码会检查第一个字符是否无效。要检查是否存在任何无效字符,请取消您的字符类而不是函数返回并删除锚:
if ( preg_match("/[^-a-z0-9_]/i", $username) )
{
return true;
}
当然,你也可以将它缩短为/[^-\w]/
(“单词”字符是字母,数字和下划线),如果你不想允许破折号,甚至只需/\W/
答案 1 :(得分:2)
如果$username
只有字母数字和下划线,则返回TRUE
if (preg_match("/^[a-z0-9_]+$/i", $username) )
{
return true;
}
答案 2 :(得分:1)
您的表达式仅匹配1个字符。尝试 / ^ [ - a-z0-9 _] + $ / i '+'匹配多于1个字符,'$'是行结束
答案 3 :(得分:1)
你也需要在最后锚定它,而不是只检查第一个字符。请改为"/^[-a-z0-9_]*$/i"
。
答案 4 :(得分:0)
你没有一个转发器。你需要一个转发器,如+。据我所知,没有执行它,你检查行的开头和一个匹配a-zA-Z0-9和_的字符,但是没有跟在第一个字符后面。