アルゴリズム問題「パスワードジェネレータ」を作れ
ルール
- 8文字固定
- 半角英字(大文字, 小文字を1文字ずつ), 半角数字, 記号を必ずすべて含む
※重複文字が含まれるのは許容する
プログラム
const STRINGS = 'abcdefghijklmnopqrstuvwxyz' const NUMBERS = '0123456789' const SYMBOLS = '!"#$%&-^¥@;:/<>+*{}[]|~=' const LEN = 8 let result = '' let seed = STRINGS + STRINGS.toUpperCase() + NUMBERS + SYMBOLS // generate password const generate = () => { // initialize result = '' for (let i = 0; i < LEN; i++) { result += seed[Math.floor(Math.random() * seed.length)] } } // format check const is_correct_format = (pass) => { return pass.match(/^(?=.*[a-z]+)(?=.*[A-Z]+)(?=.*[0-9]+)(?=.*[!"#$%&\-^¥\\@;:\/<>\+\*{}\[\]\|~=]).*$/) } do { generate() } while (!is_correct_format(result)) console.log(result)
いや〜, もっとスマートな書き方あると思う!