【问题标题】:Eregi Validation Issue [duplicate]Eregi 验证问题 [重复]
【发布时间】: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


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 为什么 i 模式修饰符和明确的 A-Za-z
      • @alex i 用于大小写 insensitive 搜索,eregi 会这样做,应该包括在内。
      • @mc10:但答案已经涵盖了字符类中的A-Za-z
      • @alex,我刚刚复制了以前的正则表达式。我回答的要点是 OP 不应该使用eregi,我想@Jack 会自己弄清楚其余的。
      猜你喜欢
      • 1970-01-01
      • 2010-09-30
      • 2020-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 2014-10-16
      相关资源
      最近更新 更多