Few small improvements to the password strength meter.

git-svn-id: http://svn.automattic.com/wordpress/trunk@8722 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
azaozz 2008-08-24 14:35:46 +00:00
parent 67ef4e1abc
commit f2dd6dd861
3 changed files with 62 additions and 68 deletions

View File

@ -3,56 +3,55 @@
// Firas Kassem phiras.wordpress.com || phiras at gmail {dot} com // Firas Kassem phiras.wordpress.com || phiras at gmail {dot} com
// for more information : http://phiras.wordpress.com/2007/04/08/password-strength-meter-a-jquery-plugin/ // for more information : http://phiras.wordpress.com/2007/04/08/password-strength-meter-a-jquery-plugin/
var shortPass = pwsL10n.short
var badPass = pwsL10n.bad
var goodPass = pwsL10n.good
var strongPass = pwsL10n.strong
function passwordStrength(password,username) { function passwordStrength(password,username) {
score = 0 var shortPass = 1, badPass = 2, goodPass = 3, strongPass = 4, score = 0, d, s, u, l;
//password < 4 //password < 4
if (password.length < 4 ) { return shortPass } if (password.length < 4 ) { return shortPass };
//password == username //password == username
if (password.toLowerCase()==username.toLowerCase()) return badPass if (password.toLowerCase()==username.toLowerCase()) return badPass;
//password length //password length
score += password.length * 4 score += password.length * 4;
score += ( checkRepetition(1,password).length - password.length ) * 1 score += ( checkRepetition(1,password).length - password.length ) * 1;
score += ( checkRepetition(2,password).length - password.length ) * 1 score += ( checkRepetition(2,password).length - password.length ) * 1;
score += ( checkRepetition(3,password).length - password.length ) * 1 score += ( checkRepetition(3,password).length - password.length ) * 1;
score += ( checkRepetition(4,password).length - password.length ) * 1 score += ( checkRepetition(4,password).length - password.length ) * 1;
d = password.match(/\d/g);
s = password.match(/[^\d\w]/g);
u = password.match(/[A-Z]/g);
l = password.match(/[a-z]/g);
//password has 3 numbers //password has 3 numbers
if (password.match(/(.*[0-9].*[0-9].*[0-9])/)) score += 5 if ( d && d.length > 2 ) score += 5;
//password has 2 sybols //password has 2 sybols
if (password.match(/(.*[!,@,#,$,%,^,&,*,?,_,~].*[!,@,#,$,%,^,&,*,?,_,~])/)) score += 5 if ( s && s.length > 1 ) score += 10;
//password has Upper and Lower chars //password has Upper and Lower chars
if (password.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/)) score += 10 if ( u && l ) score += 10;
//password has number and chars //password has number and chars
if (password.match(/([a-zA-Z])/) && password.match(/([0-9])/)) score += 15 if ( u && l && d ) score += 15;
// //
//password has number and symbol //password has number and symbol
if (password.match(/([!,@,#,$,%,^,&,*,?,_,~])/) && password.match(/([0-9])/)) score += 15 if ( s && d ) score += 15;
//password has char and symbol //password has Upper char and symbol
if (password.match(/([!,@,#,$,%,^,&,*,?,_,~])/) && password.match(/([a-zA-Z])/)) score += 15 if ( u && s ) score += 15;
//password is just a nubers or chars //password is just a nubers or chars
if (password.match(/^\w+$/) || password.match(/^\d+$/) ) score -= 10 if ( ! s ) score -= 10;
//verifing 0 < score < 100 //verifing 0 < score < 100
if ( score < 0 ) score = 0 if ( score < 0 ) score = 0;
if ( score > 100 ) score = 100 if ( score > 100 ) score = 100;
if (score < 34 ) return badPass if ( score < 34 ) return badPass;
if (score < 68 ) return goodPass if ( score < 68 || password.length < 7 ) return goodPass;
return strongPass return strongPass;
} }

View File

@ -23,59 +23,52 @@ else
function profile_js ( ) { function profile_js ( ) {
?> ?>
<script type="text/javascript"> <script type="text/javascript">
function check_pass_strength ( ) { (function($){
var pass = jQuery('#pass1').val(); function check_pass_strength () {
var user = jQuery('#user_login').val();
// get the result as an object, i'm tired of typing it var pass = $('#pass1').val();
var res = jQuery('#pass-strength-result'); var user = $('#user_login').val();
$('#pass-strength-result').removeClass('short bad good strong');
if ( ! pass ) {
$('#pass-strength-result').html( pwsL10n.empty );
return;
}
var strength = passwordStrength(pass, user); var strength = passwordStrength(pass, user);
jQuery(res).removeClass('short bad good strong'); if ( 2 == strength )
$('#pass-strength-result').addClass('bad').html( pwsL10n.bad );
if ( strength == pwsL10n.bad ) { else if ( 3 == strength )
jQuery(res).addClass('bad'); $('#pass-strength-result').addClass('good').html( pwsL10n.good );
jQuery(res).html( pwsL10n.bad ); else if ( 4 == strength )
} $('#pass-strength-result').addClass('strong').html( pwsL10n.strong );
else if ( strength == pwsL10n.good ) { else
jQuery(res).addClass('good');
jQuery(res).html( pwsL10n.good );
}
else if ( strength == pwsL10n.strong ) {
jQuery(res).addClass('strong');
jQuery(res).html( pwsL10n.strong );
}
else {
// this catches 'Too short' and the off chance anything else comes along // this catches 'Too short' and the off chance anything else comes along
jQuery(res).addClass('short'); $('#pass-strength-result').addClass('short').html( pwsL10n.short );
jQuery(res).html( pwsL10n.short );
}
} }
function update_nickname ( ) { function update_nickname () {
var nickname = jQuery('#nickname').val(); var nickname = $('#nickname').val();
var display_nickname = jQuery('#display_nickname').val(); var display_nickname = $('#display_nickname').val();
if ( nickname == '' ) { if ( nickname == '' ) {
jQuery('#display_nickname').remove(); $('#display_nickname').remove();
} }
jQuery('#display_nickname').val(nickname).html(nickname); $('#display_nickname').val(nickname).html(nickname);
} }
jQuery(function($) { $(document).ready( function() {
$('#pass1').keyup( check_pass_strength ) $('#pass1,#pass2').attr('autocomplete','off');
$('#nickname').blur(update_nickname);
$('#pass1').keyup( check_pass_strength );
$('.color-palette').click(function(){$(this).siblings('input[name=admin_color]').attr('checked', 'checked')}); $('.color-palette').click(function(){$(this).siblings('input[name=admin_color]').attr('checked', 'checked')});
} );
jQuery(document).ready( function() {
jQuery('#pass1,#pass2').attr('autocomplete','off');
jQuery('#nickname').blur(update_nickname);
}); });
})(jQuery);
</script> </script>
<?php <?php
} }
@ -349,7 +342,8 @@ if ( $show_password_fields ) :
<input type="password" name="pass2" id="pass2" size="16" value="" /> <?php _e("Type your new password again."); ?><br /> <input type="password" name="pass2" id="pass2" size="16" value="" /> <?php _e("Type your new password again."); ?><br />
<?php if ( $is_profile_page ): ?> <?php if ( $is_profile_page ): ?>
<p><strong><?php _e('Password Strength'); ?></strong></p> <p><strong><?php _e('Password Strength'); ?></strong></p>
<div id="pass-strength-result"><?php _e('Too short'); ?></div> <?php _e('Hint: Use upper and lower case characters, numbers and symbols like !"?$%^&amp;( in your password.'); ?> <div id="pass-strength-result"><?php _e('Strength indicator'); ?></div>
<p><?php _e('Hint: Your password should be at least seven characters long. To make it stronger, use upper and lower case letters, numbers and symbols like ! " ? $ % ^ &amp; ).'); ?></p>
<?php endif; ?> <?php endif; ?>
</td> </td>
</tr> </tr>

View File

@ -116,11 +116,12 @@ function wp_default_scripts( &$scripts ) {
$scripts->add( 'admin-categories', '/wp-admin/js/categories.js', array('wp-lists'), '20071031' ); $scripts->add( 'admin-categories', '/wp-admin/js/categories.js', array('wp-lists'), '20071031' );
$scripts->add( 'admin-tags', '/wp-admin/js/tags.js', array('wp-lists'), '20071031' ); $scripts->add( 'admin-tags', '/wp-admin/js/tags.js', array('wp-lists'), '20071031' );
$scripts->add( 'admin-custom-fields', '/wp-admin/js/custom-fields.js', array('wp-lists'), '20070823' ); $scripts->add( 'admin-custom-fields', '/wp-admin/js/custom-fields.js', array('wp-lists'), '20070823' );
$scripts->add( 'password-strength-meter', '/wp-admin/js/password-strength-meter.js', array('jquery'), '20070405' ); $scripts->add( 'password-strength-meter', '/wp-admin/js/password-strength-meter.js', array('jquery'), '20080824' );
$scripts->localize( 'password-strength-meter', 'pwsL10n', array( $scripts->localize( 'password-strength-meter', 'pwsL10n', array(
'short' => __('Too short'), 'empty' => __('Strength indicator'),
'bad' => __('Bad'), 'short' => __('Very weak'),
'good' => __('Good'), 'bad' => __('Weak'),
'good' => __('Medium'),
'strong' => __('Strong') 'strong' => __('Strong')
) ); ) );
$scripts->add( 'admin-comments', '/wp-admin/js/edit-comments.js', array('wp-lists', 'jquery-ui-draggable', 'jquery-ui-resizable'), '20080821' ); $scripts->add( 'admin-comments', '/wp-admin/js/edit-comments.js', array('wp-lists', 'jquery-ui-draggable', 'jquery-ui-resizable'), '20080821' );