我想知道是否可以过滤像这样的输入内容。
我的输入接受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);
}
});
答案 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(':')
}