LoginSignup
2
1

More than 5 years have passed since last update.

0 ~ 65535.65535.65535.65535 までのバージョン表記を正規表現+αで調べたい

Last updated at Posted at 2017-02-16

正規表現で範囲は向いていない。

要件

  • 最大4ブロックの整数値によるバージョン表現をチェックしたい。
  • 各ブロックは.で区切られる
  • 1ブロックの値は0から65535まで
  • 0以外の数値の先頭に0をつけてはいけない(ex:0123)
  • ブロック数は任意である
  • ただし、末尾は.で終わってはいけない

コード


var testcases = {
  ''                        : false,
  'test'                    : false,
  '0'                       : true,
  '1'                       : true,
  '1.0'                     : true,
  '1.0.0'                   : true,
  '1.0.0'                   : true,
  '1.0.0.0'                 : true,
  '1.0.0.0.'                : false,
  '1.0.0.0.0'               : false,
  '1.0.0.0.'                : false,
  '1..0.0.0'                : false,
  '01.2.3.4'                : false,
  '65535.65535.65535.65535' : true,
  '65536.65535.65535.65535' : false,
  '65535.65536.65535.65535' : false,
  '65535.65535.65536.65535' : false,
  '65535.65535.65535.65536' : false,
};


function tester(input) {
  if (!input.match(/^([1-9]\d{0,4}|0)(\.(([1-9]\d{0,4})|0)){0,3}$/)) {
    return false;
  }

  return input.split('.').every((value, index, array) => {
    return (Number(value) <= 65535);
  })

}

for (input in testcases) {
  console.log((tester(input) == testcases[input]));
}

先頭0の排除と0の両立がわからないのでかんたんな繰り返しと|0で逃げ。
65535の範囲も難しいので正規表現以外でキャストチェック。ここに穴があるかも。

参考…でもない


もっといいのがあれば

2
1
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1