1

我一直在阅读和阅读正则表达式,但我无法弄清楚我的代码有什么问题:

if(eregi("^[A-Za-z0-9_\-]$", $username)){return true;}

它永远不会返回 true。我正在尝试验证用户名,并且只允许小写 az、大写 az、数字、连字符和下划线。

4

2 回答 2

5

eregi()已弃用。改为使用preg_match()

您没有正则表达式分隔符(例如/, @,~等)。

使用preg_match('/^[\w-]+\z/').

  • /是我使用的分隔符。PHP 允许您使用许多其他字符
  • \w是一个快捷方式[A-Za-z0-9_]。在这里使正则表达式更短并且希望更清晰很有用。
  • 在字符类内部,如果-不是有效范围的一部分,它将按字面意思理解。我没有逃脱它,因为它不需要在这种情况下逃脱。
  • +是一个量词,表示匹配 1 次或多次。你在这里需要那个。
  • \z表示匹配字符串的结尾。你用过$,这将允许一个尾随\n
于 2011-07-13T01:26:47.437 回答
1

不要使用eregi- 它已被弃用,请preg_match改用:

if (preg_match("/^[A-Za-z0-9_\-]+/i$", $username)){return true;}
于 2011-07-13T01:28:01.593 回答