index.ts
2.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
// @ts-nocheck
// #ifndef APP-ANDROID || APP-HARMONY || APP-IOS
type UTSJSONObject = {
version : string | number | null;
};
// #endif
// #ifdef APP-ANDROID || APP-HARMONY || APP-IOS
// type Options = UTSJSONObject
// #endif
const IPv4SegmentFormat = '(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])';
const IPv4AddressFormat = `(${IPv4SegmentFormat}\\.){3}${IPv4SegmentFormat}`;
const IPv4AddressRegExp = new RegExp(`^${IPv4AddressFormat}$`);
const IPv6SegmentFormat = '(?:[0-9a-fA-F]{1,4})';
const IPv6AddressRegExp = new RegExp(
'^(' +
`(?:${IPv6SegmentFormat}:){7}(?:${IPv6SegmentFormat}|:)|` +
`(?:${IPv6SegmentFormat}:){6}(?:${IPv4AddressFormat}|:${IPv6SegmentFormat}|:)|` +
`(?:${IPv6SegmentFormat}:){5}(?::${IPv4AddressFormat}|(:${IPv6SegmentFormat}){1,2}|:)|` +
`(?:${IPv6SegmentFormat}:){4}(?:(:${IPv6SegmentFormat}){0,1}:${IPv4AddressFormat}|(:${IPv6SegmentFormat}){1,3}|:)|` +
`(?:${IPv6SegmentFormat}:){3}(?:(:${IPv6SegmentFormat}){0,2}:${IPv4AddressFormat}|(:${IPv6SegmentFormat}){1,4}|:)|` +
`(?:${IPv6SegmentFormat}:){2}(?:(:${IPv6SegmentFormat}){0,3}:${IPv4AddressFormat}|(:${IPv6SegmentFormat}){1,5}|:)|` +
`(?:${IPv6SegmentFormat}:){1}(?:(:${IPv6SegmentFormat}){0,4}:${IPv4AddressFormat}|(:${IPv6SegmentFormat}){1,6}|:)|` +
`(?::((?::${IPv6SegmentFormat}){0,5}:${IPv4AddressFormat}|(?::${IPv6SegmentFormat}){1,7}|:))` +
')(%[0-9a-zA-Z.]{1,})?$'
);
/**
* 验证IP地址格式
* @param {string} ipAddress - 要验证的IP地址
* @param {Options|string|number} options - 配置选项或版本号
* @returns {boolean} 是否匹配有效的IP地址格式
*/
export function isIP(ipAddress : string | null, options : UTSJSONObject | string | number | null = null) : boolean {
// assertString(ipAddress);
if(ipAddress == null) return false
let version : string | number | null;
if (typeof options == 'object') {
version = (options as UTSJSONObject|null)?.['version'];
} else {
version = options;
}
const versionStr = version != null ? `${version}` : '';
if (versionStr == '') {
return isIP(ipAddress, 4) || isIP(ipAddress, 6);
}
if (versionStr == '4') {
return IPv4AddressRegExp.test(ipAddress.trim());
}
if (versionStr == '6') {
return IPv6AddressRegExp.test(ipAddress.trim());
}
return false;
}