使用正则表达式检查String是否存在非法字符

时间:2009-05-18 16:58:53

标签: php regex

我想在PHP中使用以下正则表达式检查是否存在任何非法字符。基本上,我想只允许使用字母数字和下划线(_)。不幸的是,下面的代码似乎没有正常工作。如果字符串$ username中有任何非法字符,则应返回true。但是,它仍然允许字符串中的任何字符。知道正则表达式有什么问题吗?

if ( !preg_match("/^[-a-z0-9_]/i", $username) )
{
    return true;
}

提前致谢。

5 个答案:

答案 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和_的字符,但是没有跟在第一个字符后面。