正規表現で範囲は向いていない。
要件
- 最大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の範囲も難しいので正規表現以外でキャストチェック。ここに穴があるかも。
参考…でもない
もっといいのがあれば