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

Ste*_*hen 3 php regex special-characters

我在PHP中有一个密码验证脚本,它检查一些不同的正则表达式,并根据哪一个失败抛出一个唯一的错误消息.以下是正则表达式的数组以及匹配失败时引发的错误消息:

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 [~!@#$%^&*()_+=]'
    )
);
Run Code Online (Sandbox Code Playgroud)

出于某种原因,无论我通过验证,"特殊字符"规则都会失败.我猜这是表达式的一个问题.如果有更好(或更正确)的方式来编写这些表达式,我全都耳朵!

Mar*_*ers 6

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

/^.*[A-Z].*$/i
Run Code Online (Sandbox Code Playgroud)

i末意味着PCRE_CASELESS,也就是说,它会忽略大小写.你应该省略i.

  • 他应该删除`.*`,`^`和`$`因为它们只是模仿`/ [AZ] /`的功能 (2认同)