正規表現を使ったユーザ登録チェック
by yshrkn
JavaScript
// ---------------------------------------------
// ユーザ管理用モジュール
// ---------------------------------------------
var userManager = (function() {
// ユーザ情報を格納するための配列
var _users = [];
/**
* A. n個の記号が含まれているかを確認する関数
*/
function hasSymbols(str, min) {
var regex = new RegExp("[^a-zA-Z0-9]{" + min + ",}", "g");
var symbols = regex.test(str);
return symbols;
}
/**
* B. n個の数字が含まれているかを確認する関数
*/
function hasNumbers(str, min) {
var regex = new RegExp("\\d{" + min + ",}", "g");
var numbers = regex.test(str);
return numbers;
}
/**
* C. 既に登録済みかを確認する関数
*/
function isRegistered(user) {
var isUsedId = false;
for (var i = 0, len = _users.length; i < len; i++) {
if (_users[i].id === user.id) {
isUsedId = true;
break;
}
}
return isUsedId;
}
/**
* ユーザを登録するためのメソッドです。
*
* @param{Object} user ユーザオブジェクト
*/
function add(user) {
// A. 記号チェック
var minSymbols = 2;
if (!hasSymbols(user.id, minSymbols)) {
throw new Error(minSymbols + '以上の記号が必要です。');
}
// B. 数字チェック
var minNumbers = 2;
if (!hasNumbers(user.id, minNumbers)) {
throw new Error(minNumbers + '以上の数字が必要です。');
}
// C. 登録済みチェック
if (isRegistered(user)) {
throw new Error(user.id + "は既に登録されています。");
}
// 適切な場合は、ユーザを登録する
_users.push(user);
}
// public API
return {
add: add
};
}());
// ---------------------------------------------
// Main
// ---------------------------------------------
var users = [
{ id: 'taro17@', age: 48 },
{ id: 'taro17@%', age: 20 },
{ id: 'taro17@%', age: 26 }
];
// 複数のユーザを登録します。
//
// 【出力結果】
// 2個以上の記号が必要です。
// taro17@%を登録しました。
// taro17@%は既に登録されています。
users.forEach(function(user) {
try {
userManager.add(user);
console.log(user.id + 'を登録しました。');
} catch (error) {
console.warn(error.message);
}
});