我一直在尝试将下面的内容从Python转换为node.js。它是一个简单的程序,它使用regex检查IP地址是公共地址还是私有地址:
import re
def is_private_ip(ip):
"""
Returns `True` if the `ip` parameter is a private network address.
"""
c = re.compile('(^127\.0\.0\.1)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^192\.168\.)')
if c.match(ip): return True
return False
print is_private_ip('192.168.0.1') # True
print is_private_ip('8.8.8.8') # False
print is_private_ip('109.231.231.221') # False
我在Javascript中实现它,如下所示:
var localIp = new RegExp(/(^127\.0\.0\.1)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^192\.168\.)/);
console.log('192.168.0.1'.match(localIp));
console.log('8.8.8.8'.match(localIp));
console.log('109.231.231.221'.match(localIp));
这给了我以下输出:
[ '192.168.',
undefined,
undefined,
undefined,
undefined,
undefined,
'192.168.',
index: 0,
input: '192.168.0.1' ]
null
null
在我看来,这是可行的(甚至不确定tbh)。应该公开的两个I正在返回null
,所以我猜这是对的。但我不明白另一场比赛的结果是什么?我还不知道这意味着什么
发布于 2016-01-14 12:18:43
var localIp = new RegExp(/(^127\.0\.0\.1)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^192\.168\.)/);
Console.log(‘192.168.0.1’..match(LocalIp));
给出输出:
[ '192.168.',
undefined,
undefined,
undefined,
undefined,
undefined,
'192.168.']
这意味着:
'192.168.'
,它是这个字符串上正则表达式的匹配。唯一的一个undefined
是regex中第一个组的匹配:(^127\.0\.0\.1)
undefined
:(^10\.)
undefined
:(^172\.1[6-9]\.)
undefined
:(^172\.2[0-9]\.)
undefined
:(^172\.3[0-1]\.)
'192.168.'
:(^192\.168\.)
这是因为括号,每个括号给出一个匹配(或未定义),加上match()
函数返回的匹配。
发布于 2016-01-14 12:12:45
.match()给出了字符串中可能的匹配数。也许您要寻找的是.test()方法。
您需要像这样修改代码:
var localIp = new RegExp(/(^127\.0\.0\.1)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^192\.168\.)/);
console.log(localIp.test('192.168.0.1'));
console.log(localIp.test('8.8.8.8'));
console.log(localIp.test('109.231.231.221'));
有关match方法的更多详细信息,请参阅此处:对象/字符串/匹配
发布于 2016-01-14 12:13:12
如果正则表达式不包括g标志,则返回与RegExp.exec()相同的结果。返回的Array有一个额外的输入属性,该属性包含解析的原始字符串。此外,它还有一个index属性,它表示字符串中匹配的基于零的索引。
返回的数组将匹配的文本作为第一个项,然后为每个匹配的包含所捕获文本的括号提供一个项。 如果匹配失败,exec()方法将返回null。
也许您想要使用RegExp.prototype.test()来代替:
var localIp = new RegExp(/(^127\.0\.0\.1)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^192\.168\.)/);
console.log(localIp.test('192.168.0.1')); // => true
console.log(localIp.test('8.8.8.8')); // => false
console.log(localIp.test('109.231.231.221')); // => false
https://stackoverflow.com/questions/34789109
复制相似问题