我一直在阅读和阅读正则表达式,但我无法弄清楚我的代码有什么问题:
if(eregi("^[A-Za-z0-9_\-]$", $username)){return true;}
它永远不会返回真实。我正在尝试验证用户名,只允许使用小写的a-z,大写的a-z,数字,连字符和下划线。
答案 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;}