jQueryでパスワードの強度判定
設定したパスワードの強度を判定する(短い/弱い/強い)モジュール jQuery版、プラグイン
PHP版をjQuery版に置き換え。
jQuery
$(function() {
$('#pw').keyup(function(){
$(this).next('div').html(checkPassword($(this).val()));
});
/**
* checkPassword
* @param {string} str
*/
function checkPassword(str)
{
var state = '';
// LESS 短いパスワード
var less_flg = false;
var count = str.length;
if (count < 8) {
less_flg = true;
state = '短い';
}
// WARK 弱いパスワード
var weak_flg = false;
if (less_flg == false) {
// 連続したパターン 11111111 12121212 123123123
if (str.match(/^([0-9a-z]{1,3})\1+$/i)) {
weak_flg = true;
} else if (str.match(/^[0-9]+$/)) {
num_flg = true;
// 連続した数字 12345678 98765432
var num = [];
var diff_num = [];
for (var i = 0; i < count; i++) {
num[i] = str.substr(i, 1);
if (i > 0) {
diff_num[i] = num[i] - num[i - 1];
if (i > 1) {
if (diff_num[i] != diff_num[i - 1]) {
num_flg = false;
}
}
}
}
if (num_flg) {
weak_flg = true;
}
} else if (str.match(/^[a-z]+$/)) {
var alpha_flg = true;
// 連続したアルファベット abcdefgh zxywvuts
var dec = [];
var diff_dec = [];
for (var i = 0; i < count; i++) {
dec[i] = str.substr(i, 1).charCodeAt(0);
if (i > 0) {
diff_dec[i] = dec[i] - dec[i - 1];
if (i > 1) {
if (diff_dec[i] != diff_dec[i - 1]) {
alpha_flg = false;
}
}
}
}
if (alpha_flg) {
weak_flg = true;
}
}
if (weak_flg == false) {
// 指定のキーワードにマッチ
var ng_password = [ 'password', 'qwertyui' ];
$.each(ng_password, function(i) {
if (str == ng_password[i]) {
weak_flg = true;
}
});
}
if (weak_flg) {
state = '弱い';
}
}
// STRONG 強いパスワード
var strong_flg = false;
if (less_flg == false && weak_flg == false) {
// 英数混在 10文字以上 a1b2c3d4e5 abcde12345
if (str.match(/^[0-9a-z]{10,}$/i) && str.match(/[0-9]+/) && str.match(/[a-z]+/i)) {
strong_flg = true;
state = '強い';
}
}
return state;
}
});
JavaScriptでは/^(?=.*[0-9])(?=.*[a-z])[0-9a-z]{10,}$/iが動作しない。
サンプル
jQuery Plugin
プラグイン作成しました。
v 1.0.0 : Password Checker / jQuery Plugin 作成しました。
動作環境
jQuery 1.11.2, 2.1.3
Chrome 41, Firefox 36, Internet Explorer 11, Opera 28, Safari 5
詳細はZipに梱包されているファイルをご確認ください。
2014年3月に公開したPHP版をjQuery版に置き換え、プラグイン化したものです。