psl (公共后缀列表)
psl 是一个 JavaScript 基于
公共后缀列表。 。 。 .
此项实施工作将对照 mozilla主持的测试数据 并欣然提供 科莫多语Name。 。 。 .
什么是公共后缀列表 ?
公共后缀列表是一个交叉复仇倡议,提供准确列表 域名后缀.
公共后缀列表是Mozilla项目的一项举措,但 维持为社区资源。 它可用于任何软件, 但最初是为了满足浏览器制造商的需要而创建的.
一个"公共后缀"是互联网用户可以直接注册姓名的后缀. 一些公共后缀的例子有".com",".co.uk"和"pvt.k12.wy.us"等. 这个 公共后缀 列表是所有已知的公共后缀列表.
资料来源: http://publicsaftix.org (中文(简体) )
安装
这个模块既可用于Node.js,也可用于浏览器. 详见下文 细节.
节点.js
本模块在Node.js v8,v10,v12,v14,v16,v18,v20和v22上进行测试. 见
.github/workflows/node.js.yml。 。 。 .
npm install psl
无害环境管理
从版本 v1.13.0 您现在可以导入 psl 作为无害环境管理.
import psl from 'psl';
常见JS
如果您的工程仍然使用普通JS, 您可以继续导入模块, 如 在以前的版本中.
const psl = require('psl');
浏览器
使用捆绑器
如果你用捆绑机来构建你的应用程序, 你应该能够 import
和(或) require 和Node.js一样的模块.
无害环境管理(使用CDN)
在现代浏览器中,您也可以直接从一个 CDN用于
示例:
import psl from 'https://unpkg.com/psl@latest/dist/psl.mjs';
UMD / 普通JS 语言
终于可以下载了 dist/psl.umd.cjs
并将其写入脚本标签.
<script src="psl.umd.cjs"></script>
此脚本被捆绑并包裹在 是吗 包装器,所以你应该可以单独使用或与模块一起使用 加载器.
该剧本也提供于最受欢迎的CDN上. 例如:
- https://unpkg.com/psl@latest/dist/psl.umd.cjs (中文(简体) )
API 密码
psl.parse(domain)
基于公共后缀列表的解析域. 返回 a Object 改为:
属性 :
tld: 顶级域(这是 公共后缀) (中文(简体) ).sld: 第二级域名(域名的第一个私有部分).domain:域名为:sld+ 键tld。 。 。 .subdomain: 域中可选的剩余部分.
实例
没有子域的解析域 :
import psl from 'psl';
const parsed = psl.parse('google.com');
console.log(parsed.tld); // 'com'
console.log(parsed.sld); // 'google'
console.log(parsed.domain); // 'google.com'
console.log(parsed.subdomain); // null
用子域解析域 :
import psl from 'psl';
const parsed = psl.parse('www.google.com');
console.log(parsed.tld); // 'com'
console.log(parsed.sld); // 'google'
console.log(parsed.domain); // 'google.com'
console.log(parsed.subdomain); // 'www'
用嵌入子域分析域 :
import psl from 'psl';
const parsed = psl.parse('a.b.c.d.foo.com');
console.log(parsed.tld); // 'com'
console.log(parsed.sld); // 'foo'
console.log(parsed.domain); // 'foo.com'
console.log(parsed.subdomain); // 'a.b.c.d'
psl.get(domain)
获取域名, sld + 键 tld. 回归 null 如果无效.
实例
import psl from 'psl';
// null input.
psl.get(null); // null
// Mixed case.
psl.get('COM'); // null
psl.get('example.COM'); // 'example.com'
psl.get('WwW.example.COM'); // 'example.com'
// Unlisted TLD.
psl.get('example'); // null
psl.get('example.example'); // 'example.example'
psl.get('b.example.example'); // 'example.example'
psl.get('a.b.example.example'); // 'example.example'
// TLD with only 1 rule.
psl.get('biz'); // null
psl.get('domain.biz'); // 'domain.biz'
psl.get('b.domain.biz'); // 'domain.biz'
psl.get('a.b.domain.biz'); // 'domain.biz'
// TLD with some 2-level rules.
psl.get('uk.com'); // null);
psl.get('example.uk.com'); // 'example.uk.com');
psl.get('b.example.uk.com'); // 'example.uk.com');
// More complex TLD.
psl.get('c.kobe.jp'); // null
psl.get('b.c.kobe.jp'); // 'b.c.kobe.jp'
psl.get('a.b.c.kobe.jp'); // 'b.c.kobe.jp'
psl.get('city.kobe.jp'); // 'city.kobe.jp'
psl.get('www.city.kobe.jp'); // 'city.kobe.jp'
// IDN labels.
psl.get('食狮.com.cn'); // '食狮.com.cn'
psl.get('食狮.公司.cn'); // '食狮.公司.cn'
psl.get('www.食狮.公司.cn'); // '食狮.公司.cn'
// Same as above, but punycoded.
psl.get('xn--85x722f.com.cn'); // 'xn--85x722f.com.cn'
psl.get('xn--85x722f.xn--55qx5d.cn'); // 'xn--85x722f.xn--55qx5d.cn'
psl.get('www.xn--85x722f.xn--55qx5d.cn'); // 'xn--85x722f.xn--55qx5d.cn'
psl.isValid(domain)
检查一个域是否有有效的公共后缀 。 回返a Boolean 显示
域是否有有效的公共后缀.
示例
import psl from 'psl';
psl.isValid('google.com'); // true
psl.isValid('www.google.com'); // true
psl.isValid('x.yz'); // false
测试和建筑
对Node.js和浏览器都有测试(使用 剧作家 财务报告和审定财务报表 浏览器Stack) (中文(简体) ).
# Run tests in node.
npm test
# Run tests in browserstack.
npm run test:browserstack
# Update rules from publicsuffix.org
npm run update-rules
# Build ESM, CJS and UMD and create dist files
npm run build
如果你看到可能的改进,请随意叉出!
鸣谢
- Mozilla基金会 公共后缀列表
- 多亏了罗布·斯特拉林 科莫多语Name 用于提供 测试数据.
- 灵感来自 weppos/ publics后缀- ruby
许可证
《麻省理工学院许可证》
版权 (c) 2014-2024 卢波·蒙特罗 卢波蒙特罗@gmail.com
特此免费准许任何人获得副本 ,用于处理 在软件中不受限制,包括不受限制的权利 使用、复制、修改、合并、出版、分发、分许可证和/或出售 软件的复制件,并允许该软件所针对的人 满足下列条件:
上述版权通知和本许可通知应列入 软件的所有副本或大部分.
软件是提供的"AS IS", 没有任何的恐惧, EXPRESS OR ,包括但不限制于雇佣军的保障, 特别目的和非目的的证明。 绝对不会 B. 任何索赔、索赔或其他索赔的索赔人或 责任,在契约、契约或其他行为中,产生于, 或与溶剂或溶剂的使用或 软件.