代码之家  ›  专栏  ›  技术社区  ›  Stephen

为什么这个正则表达式会失败?

  •  3
  • Stephen  · 技术社区  · 14 年前

    array(
        'rule1' => array(
            '/^.*[\d].*$/i',
            'Password must contain at least one number.'
        ),
        'rule2' => array(
            '/^.*[a-z].*$/i',
            'Password must contain at least one lowercase letter'
        ),
        'rule3' => array(
            '/^.*[A-Z].*$/i',
            'Password must contain at least one uppercase letter'
        ),
        'rule4' => array(
            '/^.*[~!@#$%^&*()_+=].*$/i',
            'Password must contain at least one special character [~!@#$%^&*()_+=]'
        )
    );
    

    出于某种原因,无论我通过了什么验证,“特殊字符”规则都会失败。我猜这是表达式的问题。如果有更好(或正确)的方法来写这些表达式,我洗耳恭听!

    3 回复  |  直到 14 年前
        1
  •  6
  •   Mark Byers    14 年前

    我看不出您的特殊字符正则表达式有问题,但可以看到大小写检查有问题:

    /^.*[A-Z].*$/i
    

    这个 i PCRE_CASELESS ,即忽略大小写。你应该省略 .

        2
  •  1
  •   webbiedave    14 年前

    正则表达式应该是:

    /[~!@#$%^&*()_+=]/
    

    不需要星星。无论哪种方式,你的正则表达式都应该起作用。

    看看有没有逻辑错误。

    另外,正如markbyers所说,您应该删除不敏感的修饰符 /i

        3
  •  0
  •   polygenelubricants    14 年前

    as seen on rubular.com

    (?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&*()_+=]).*
    

    它使用lookahead(这是由PHP的 preg

    工具书类