- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试开发 IPv6 子网划分计算器,并且需要以其扩展格式显示地址。也就是说,假设我们有这个 IP 地址:2001:DB8:C003:1::F00D/48
,我需要将 ::
替换为零,例如 :0000:0000:0000:
根据已存在的字段数(最多 8 个字段)。
我使用 switch 语句做到了这一点,但 IPv6 地址的压缩表示法也省略了前导零。从上面的IP地址来看,:DB8
是压缩的。它实际上是 :0DB8
,我也需要适应它。
这是我到目前为止所尝试过的:
代码
/*To calculate hex field*/
var field = (ip.split(":").length - 1);
var condens = ":0000:0000:0000:0000:0000:0000:0000";
switch(field)
{
case 1:
{
var block=ip.substring(ip.lastIndexOf(":")+1,ip.lastIndexOf(":")); //to extract strings between the special character
var inputString = ip,
expand = inputString.replace(/(::)+/g, condens);
console.log(expand);
while(block.length < 4)
{
//replace fields only with missing characters with 0
}
$("#expand").attr("value",expand);
break;
}
case 2:
{
var inputString = ip,
expand = inputString.replace(/(::)+/g, ":0000:0000:0000:0000:0000:0000:0000");
console.log(expand);
$("#expand").attr("value",expand);
break;
}
case 3:
{
var inputString = ip,
expand = inputString.replace(/(::)+/g, ":0000:0000:0000:0000:0000:");
console.log(expand);
$("#expand").attr("value",expand);
break;
}
case 4:
{
var inputString = ip,
expand = inputString.replace(/(::)+/g, ":0000:0000:0000:0000:");
console.log(expand);
$("#expand").attr("value",expand);
break;
}
case 5:
{
var inputString = ip,
expand = inputString.replace(/(::)+/g, ":0000:0000:0000:");
console.log(expand);
$("#expand").attr("value",expand);
break;
}
case 6:
{
var inputString = ip,
expand = inputString.replace(/(::)+/g, ":0000:0000:");
console.log(expand);
$("#expand").attr("value",expand);
break;
}
}
如您所见,目前我正在提取 :
之间的子字符串。我只需要提取长度 < 4 的子字符串,并添加前导零以使长度达到 4。然后,将我提取的子字符串替换为新的子字符串(带前导零并打印它。
有人可以帮我吗?谢谢。
最佳答案
可以用更简单的方式完成:
var input = '2001:DB8:C003:1::F00D/48';
var tmp = input.split(/\//);
var ip = tmp[0];
var subnet = tmp[1];
// if the ip is compacted
if (ip.match('::')) {
// + 1 back because there is an extra empty element in the array (because of ::)
var missingPartsNumber = 8 - ip.split(':').length + 1;
// replace the :: by the number of : needed to have 8 parts in the ip
ip = ip.replace(/::/, pad('', missingPartsNumber + 1, ':'));
}
var paddedIp = ip.split(':').map(function (part) {
return pad(part, 4, '0')
}).join(':') + '/' + subnet; // add the subnet back if needed
// from http://stackoverflow.com/a/10073788/5388620
function pad(n, width, z) {
z = z || '0';
n = n + '';
return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
}
snippet.log('in : ' + input);
snippet.log('out: ' + paddedIp);
<script src="https://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
更新
更新了我的代码以实际返回有效的 IPV6,我使用了显式变量名称,因此很容易阅读。
关于javascript - 根据长度(<4)提取特殊字符之间的子串,并将缺少的字符替换为 0,使其变为 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34587456/
我正在尝试创建一个程序,其中字符串的前三个字符重复给定次数,如下所示: foo('Chocolate', 3) # => 'ChoChoCho' foo('Abc', 3) # => 'AbcAbcA
我有以下字符串: std::string str = "Mode:AAA:val:101:id:A1"; 我想分离一个位于 "val:" 和 ":id" 之间的子字符串,这是我的方法: std::st
DNA 字符串可以是任意长度,包含 5 个字母(A、T、G、C、N)的任意组合。 压缩包含 5 个字母(A、T、G、C、N)的 DNA 字母串的有效方法是什么?不是考虑每个字母表 3 位,我们可以使用
是否有一种使用 levenstein 距离将一个特定字符串与第二个较长字符串中的任何区域进行匹配的好方法? 例子: str1='aaaaa' str2='bbbbbbaabaabbbb' if str
使用 OAuth 并使用以下函数使用我们称为“foo”(实际上是 OAuth token )的字符串加密 key public function encrypt( $text ) { // a
我是一名优秀的程序员,十分优秀!