我使用以下脚本部分来修改我的 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_match
和 strlen
函数一次对一个操作数执行其工作。这就是为什么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
。