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

kjl*_*loh 1 php regex

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

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

提前致谢.

Ben*_*ank 15

您的代码会检查第一个字符是否无效.要检查是否存在任何无效字符,请取消您的字符类而不是函数返回并删除锚:

if ( preg_match("/[^-a-z0-9_]/i", $username) )
{
    return true;
}
Run Code Online (Sandbox Code Playgroud)

当然,你也可以缩短它/[^-\w]/("单词"字符是字母,数字和下划线),或者甚至只是/\W/你不想允许破折号.

  • 这个解决方案比匹配整个字符串的解决方案更好,因为preg_match一旦遇到不允许的字符就会返回true.但是,对于像用户名这样简短的东西,这并不重要. (2认同)