PW 字符类型和长度集成失败


PW characters type and length integration fails

我使用以下脚本部分来修改我的 pw:

if ( !empty($_POST['pass1'] ) && !empty( $_POST['pass2'] ) ) {
    if ( $_POST['pass1'] == $_POST['pass2'] )
        wp_update_user( array( 'ID' => $current_user->ID, 'user_pass' => esc_attr( $_POST['pass1'] ) ) );
    else
        $error[] = __('Password doesn't match.', 'profile');
}

。我尝试添加字符类型和 pw 长度

if ( !empty($_POST['pass1'] ) && !empty( $_POST['pass2'] ) ) {
    if ( $_POST['pass1'] == $_POST['pass2']  && !preg_match('/^[a-zA-Z0-9]+$/', $_POST['pass1'], $_POST['pass2']) || strlen($_POST['pass1'], $_POST['pass2']) < 8)
        wp_update_user( array( 'ID' => $current_user->ID, 'user_pass' => esc_attr( $_POST['pass1'] ) ) );
    else
        $error[] = __('Password doesn't match.', 'profile');
}

。但它失败了。怎么了(对不起,我不是 php 专业人士)?

preg_matchstrlen 函数一次对一个操作数执行其工作。这就是为什么strlen($_POST['pass1'], $_POST['pass2'])是一个错误的函数调用。正确的调用是:

strlen($_POST['pass1']) < 8 || strlen($_POST['pass2']) < 8

同样的东西pregmatch

!preg_match('/^[a-zA-Z0-9]+$/', $_POST['pass1']) || !preg_match('/^[a-zA-Z0-9]+$/', $_POST['pass2'])

最后,您的全部if尚不清楚。如果要检查符号和密码长度,请执行以下操作:

if ( $_POST['pass1'] == $_POST['pass2']  
    && preg_match('/^[a-zA-Z0-9]+$/', $_POST['pass1']) 
    && strlen($_POST['pass1']) >= 8)

在这里,我们检查密码是否匹配,并且pass1匹配正则表达式和pass1允许的长度。

请注意,我删除了pass2的检查,因为如果密码匹配 - 无需检查pass2,因为它与pass1相同。此外,如果密码不同 - 不会执行其他检查,因为$_POST['pass1'] == $_POST['pass2']已经false