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

时间:2016-02-07 11:42:26

标签: php

我使用以下脚本部分来修改我的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专业人员)?

1 个答案:

答案 0 :(得分:1)

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与regexp匹配,pass1允许密码长度。

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