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
.