【发布时间】:2011-07-13 01:25:03
【问题描述】:
我一直在阅读和阅读正则表达式,但我无法弄清楚我的代码有什么问题:
if(eregi("^[A-Za-z0-9_\-]$", $username)){return true;}
它永远不会返回 true。我正在尝试验证用户名,并且只允许使用小写 a-z、大写 a-z、数字、连字符和下划线。
【问题讨论】:
标签: php regex validation expression eregi
我一直在阅读和阅读正则表达式,但我无法弄清楚我的代码有什么问题:
if(eregi("^[A-Za-z0-9_\-]$", $username)){return true;}
它永远不会返回 true。我正在尝试验证用户名,并且只允许使用小写 a-z、大写 a-z、数字、连字符和下划线。
【问题讨论】:
标签: php regex validation expression eregi
eregi() 已弃用。请改用preg_match()。
您没有regex delimiters(如/、@、~等)。
使用preg_match('/^[\w-]+\z/')。
/ 是我使用的分隔符。 PHP 允许你使用many other characters。\w 是[A-Za-z0-9_] 的快捷方式。在这里使正则表达式更短并希望更清晰很有用。- 不是有效范围的一部分,它将按字面意思理解。我没有逃脱它,因为它不需要在这种情况下逃脱。+ 是一个量词,表示 匹配 1 次或多次。你需要这个。\z 表示匹配字符串的结尾。您使用了$,这将允许一个尾随\n。【讨论】:
不要使用eregi - 它已被弃用,请改用preg_match:
if (preg_match("/^[A-Za-z0-9_\-]+/i$", $username)){return true;}
【讨论】:
i 模式修饰符和明确的 A-Za-z ?
i 用于大小写 insensitive 搜索,eregi 会这样做,应该包括在内。
A-Za-z。
eregi,我想@Jack 会自己弄清楚其余的。