【问题标题】:How to construct regex for preg_match in php [duplicate]如何在php中为preg_match构造正则表达式[重复]
【发布时间】:2014-03-28 04:49:52
【问题描述】:
  • 密码长度必须至少为 8 个字符

  • 密码必须以“a”开头并以“2”结尾

  • 密码必须至少包含两个数字和一个特殊字符(- _ *)

据我所知,我需要使用

preg_match("^a 2$ ?<\d", $string)

订单和满足其余要求我似乎无法做到。正则表达式会是什么样子?

【问题讨论】:

  • 阅读正则表达式基础知识(谷歌搜索)。

标签: php regex preg-match


【解决方案1】:

你可以使用这个正则表达式:

^(?=(.*?\d){2})(?=.*?[-_*])a.{6,}2$

在线演示:http://regex101.com/r/jX3uY5

【讨论】:

    【解决方案2】:

    我建议使用一些if 语句来分别检查每个条件。如果任何语句失败,您可以取消进一步检查。只有最后两个条件是正则表达式。这样您就可以控制错误处理,例如让用户知道到底出了什么问题:

    $string = '...';
    
    if (strlen($string) < 8) {
        // too short
    }
    
    if ('a' !== substr($string, 0, 1)) {
        // first character not "a"
    }
    
    if ('2' !== substr($string, -1)) {
        // last character not "2"
    }
    
    if (2 > preg_match_all('/\d/', $string)) {
        // less than 2 numbers
    }
    
    if (1 > preg_match_all('/[-_*]/', $string)) {
        // no special characters (-_*)
    }
    

    【讨论】:

      【解决方案3】:

      试试这个:

      ^(?=(.*?\d.*\d))(?=.*?[-_*])a.{6,}2$
      

      【讨论】:

        【解决方案4】:

        匹配这个

         #  ^(?=\D*\d\D*\d)(?=.*[-_*])a.{6,}2$
        
         ^ 
         (?= \D* \d \D* \d )
         (?= .* [-_*] )
         a .{6,} 2
         $
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-09-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多