如何在javascript中复用过滤器输入?

时间:2017-08-18 23:09:32

标签: javascript jquery html

我想知道是否可以过滤像这样的输入内容。

我的输入接受16个字符,其中包含:将它们分成4组:

0123:0055:02AC:01FA

正如你所看到的,我将它们分成4组,因为我稍后会使用这些值,所以我需要将它们分开,但是我希望过滤输入的最小值为0001:0001:0001:0001和最大{{1} }

我已经检查输入是否是有效的字符,如A-F-09。

可以这样做吗?

0FFF:00FF:0FFF:02FF
$('.entry').keyup(function(e) {
    var val =  $(this).val().toUpperCase().replace(/[^a-fA-F0-9:]+/,"");
    $(this).val(val);
    val = $(this).val().split(":").join("");
    if (val.length > 0) {
      val = val.match(new RegExp('.{1,4}', 'g')).join(":");
    }
    if (val.length >= 0) {
      $('.clearga').show();
    }
    $(this).val(val);
    var galacticCoords = val;
    console.log(galacticCoords);
    var [A, B, C, D] = galacticCoords.split(":");
    
    if (galacticCoords.length == 19) {
      console.log(galacticCoords+" True");
      $('.result').html(galacticCoords);
      $('.value-a').html(A);
      $('.value-b').html(B);
      $('.value-c').html(C);
      $('.value-d').html(D);
    }
});

1 个答案:

答案 0 :(得分:2)

如果它是我认为的那么它是基数为16的数字,每个部分有两个字节,你可以通过将每个数字转换为整数并检查它的范围来完成。

const range = [2095, 256, 2095, 767];
str.split(':').forEach((val, index) => {
var n = parseInt(val, 16);
   if (n > range[index]){ 
      // .. do something
   }
})

编辑:制作了一个功能

function filter(str){
    var ranges = [4095, 255, 4095, 767];
    var n;

    return (str.split(':').map((val, index) => {
        n = parseInt(val, 16);
        if (n < 1) return '0001';
        else if (n > ranges[index]) return '0'+ranges[index].toString(16);
        else return val;
    })).join(':')
}