[JavaScript] 数値がゾロ目か判定する

小ネタです。

指定された数値がゾロ目かどうかを判定する正規表現を試してみます。説明するまでも無いと思いますが「1111」「8888」など同じ数だけで構成された数値をゾロ目と言います。

結論から言うと以下の通り。

/**
 * ゾロ目判定
 *
 * @param {number} num
 * @returns {boolean}
 */
function isZorome(num){
  return String(num).match(/^([0-9])\1+$/) !== null
}

正規表現\1はキャプチャグループと呼ばれ、直前のグループがマッチした場合にそれを参照することができます。+は直前のパターンを1個以上繰り返すことを意味するため、/^([0-9])\1+$/とすることで最初の数値が最初から最後まで連続していることを示すことができます。

実際に実行すると以下のような結果になります。

console.log( isZorome(12345) )    // false
console.log( isZorome(11111) )    // true
console.log( isZorome("12345") )  // false
console.log( isZorome("11111") )  // true
console.log( isZorome("abcde") )  // false
console.log( isZorome("aaaaa") )  // false

例えば数値のみのパスワード(暗証番号)として入力された数値がゾロ目だったら警告を出すといった用途に使えるかもしれませんね。

正規表現を使わないパターン

split()で1桁ずつの数字にばらした配列に変換し、everyでチェックします。

function isZorome(value){
  const num = String(value).split('')

  return(
    (! isNaN(num[0])) && (num.every(v => v === num[0]))
  )
}

お好みの方法でどうぞ。