絵でわかるWebプログラミング入門

実習!パスワードジェネレータを作ろう01

実習として今まで学習したHTML、CSS、JavaScript(jQuery)を使ってパスワードジェネレータを作ってみましょう。

パスワードジェネレータとは

パスワードジェネレータとはパスワードを生成するスクリプトです。

とりあえず完成したパスワードジェネレータのページを見てみましょう。


ロゴとタイトルの下に、まず生成したパスワードを表示するinputが並んでいます。コピペや個別編集できるようにspanなどではなくinputを使っています。


その下には文字数を設定するツールとして、テキスト型の入力欄と範囲型の入力欄を用意しました。この二つは連動しています。


さらに使用文字を選択できるようにボタンを並べています。文字ボタンをクリックすると使用/不使用の切り替えができます。


このパスワードジェネレータのページにアクセスするとデフォルトの設定でパスワードが生成され表示されます。各設定を変更すると自動で再生成されて表示が更新されます。

パスワード表示部分を作ろう

さっそくパスワード表示部分を作りましょう。

この部分はHTMLではなくJavaScriptで生成するようにします。

パスワード表示部分
	

HTMLではtableのみを配置し、idは「result」にしておきます。


JavaScriptの部分は次のようになります。

	// パスワード表示欄を生成
	for(var i=0,html='';i<4;i++){
		html+='<tr>';
		for(var j=0;j<4;j++){
			html+='<td></td>';
		}
		html+='</tr>';
	}
	$('#result').html(html);

方法はいくつもありますが、今回はHTMLを変数にどんどん追記していき最後にjQueryのhtml()で書き込んでいます。passというクラス名を付けておきます。


次にCSSの部分です。

	#result{
		margin:0px auto 50px auto;
	}
	.pass{
		width:200px;
	}

パスワード表示部分はとりあえずここまでとします。

文字数の設定部分を作ろう

設定部分は次のようにtableによってデザインしています。

設定部分

一応このテーブルにはsettingsというidを付けておきます。

パスワードの文字数の設定は、text型のinputrange型のinputの二つを用意します。

		<table id="settings">
		<tr>
			<td><input id="length" type="text" value="16"></td>
			<td><input id="length_bar" type="range" value="16" min="1" max="60"></td>
		</tr>

それぞれにidを付けます。デフォルトとしてどちらも値を16にしています。range型はmin属性で最小値を1にし、max属性で最大値を60に設定しています。

文字選択の設定部分を作ろう

生成するパスワードの文字を選択する部分です。

文字のボタンはJavaScriptで生成しますが、他の部分はHTMLで書きます。

		<tr>
			<td><button class="all" data-list="0" type="button">すべて</button></td>
			<td id="char_list_0"></td>
		</tr>
		<tr>
			<td><button class="all" data-list="1" type="button">すべて</button></td>
			<td id="char_list_1"></td>
		</tr>
		<tr>
			<td><button class="all" data-list="2" type="button">すべて</button></td>
			<td id="char_list_2"></td>
		</tr>
		<tr>
			<td><button class="all" data-list="3" type="button">すべて</button></td>
			<td id="char_list_3"></td>
		</tr>
	

「すべて」ボタンにはallというクラス名を付け、扱いやすいようにdataに番号を持たせておきます。各文字のボタンを挿入するところにはidを付けておきます。


JavaScriptの冒頭に使用する文字の配列を定義しておきます。

	var CHAR=[
		'0123456789',
		'abcdefghijklmnopqrstuvwxyz',
		'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
		'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
	];

シングルクォーテーションとバックスラッシュをエスケープしています。


文字ボタンを生成するスクリプトは次のようになります。

	for( i=0; i<CHAR.length; i++ ){
		for( j=0,html=''; j<CHAR[i].length; j++ ){
			html+='<button class="char">'+CHAR[i][j]+'</button>';
		}
		$('#char_list_'+i).html(html);
	}

外側のforCHARの文字グループ分の4回が回され、内側のforでは各文字グループの文字数分が実行されます。文字列は文字の配列として扱われているようです。各ボタンにはcharというクラス名を付けています。

まとめ

今回の実習はここまでです。細かい部分や他のCSSデザインに関しては実際にソースを見てみましょう。

次回は各ボタンに対するイベント処理を設定していきましょう。実習!パスワードジェネレータを作ろう02に続きます。