Eregi验证问题

时间:2011-07-13 01:25:03

标签: php regex validation expression eregi

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

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

它永远不会返回真实。我正在尝试验证用户名,只允许使用小写的a-z,大写的a-z,数字,连字符和下划线。

2 个答案:

答案 0 :(得分:5)

eregi()已弃用。请改用preg_match()

您没有regex delimiters(例如/@~等。

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

  • /是我用过的分隔符。 PHP允许您使用many other characters
  • \w[A-Za-z0-9_]的快捷方式。这里使正则表达式更短并且希望更清楚是有用的。
  • 在字符类内部,如果-不是有效范围的一部分,则会按字面意思进行。我没有逃脱它,因为在这种情况下它不需要被转义。
  • +是一个量词,表示匹配1次或更多次。你需要这个。
  • \z表示匹配字符串的结尾。您使用了$,这将允许尾随\n

答案 1 :(得分:1)

请勿使用eregi - 已弃用,请改用preg_match

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