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

I use the following script-part to modify my 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');
}

... and I try to add characters type and pw length:

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');
}

... but it fails. Whats wrong (Sorry, I am not a php pro)?

Both preg_match and strlen functions do their work on one operand at a time. That's why strlen($_POST['pass1'], $_POST['pass2']) is a wrong function call. Proper call is:

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

Same stuff for pregmatch:

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

And in the end your full if is not clear. It you want to check for symbols and for password length do this:

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

Here we check if passwords match, and pass1 matches regexp and pass1 has allowed length.

Note, that I removed checks for pass2 because if passwords match - there's no need to check pass2, as it's the same as pass1. Also if passwords differ - other checks will not be executed as $_POST['pass1'] == $_POST['pass2'] is already false.