按行长度过滤
文本所有处理都在浏览器本地完成,数据不上传服务器
按长度留下或删掉某些行。真正的难点不在过滤,而在长度用哪把尺子量 —— 同一行「中文ab」在三种口径下分别是 4 个字符、8 个字节、6 个显示宽度: · 字符数 —— 你眼里的字数(按字形簇,emoji 算一个) · 字节数 —— UTF-8 编码后占几个字节,数据库字段与接口限长用的正是这个(一个汉字 3 字节) · 显示宽度 —— 排版意义上的宽度(中日韩字符算 2 宽),手机号、身份证这类定宽校验靠它 拿错口径的结果是:过滤条件看着合理、筛出来的行却不对,而且没有任何报错。所以口径必须显式选。宽度表与页面 meta 描述用的是同一张,两处对「多宽」的答案因此永远一致。 「保留」与「删除」是一对对偶选项,不是两个工具:一半人想「留下 5 到 20 字的」,另一半想「把超过 20 字的删掉」,同一套区间配两个方向,两条路都能走。
功能
- 三种长度口径:字符数、UTF-8 字节数、显示宽度
- 上下限都是闭区间,上限填 0 表示不限
- 「保留」与「删除」两个方向,同一套区间通用
- 字节数用 TextEncoder 算,emoji(4 字节)与扩展区汉字都算得对
- 显示宽度的表与 meta 描述共用一份,两处口径不会漂移
- 过滤不改动留下的行:不 trim、不合并空白、不换行尾
- 下限填得比上限大时直接报错,而不是给一份空结果
- 全程在浏览器本地计算,内容不上传
使用方法
- 粘贴要筛选的文本
- 选长度口径:字符数、字节数还是显示宽度
- 填下限与上限,选保留还是删除
- 结果实时更新,点「复制」取走
常见问题
- 三种口径差在哪?
- 拿 `中文ab` 举例:字符数 4(四个字形簇)、字节数 8(两个汉字各 3 字节 + 两个字母各 1 字节)、显示宽度 6(两个汉字各占 2 宽 + 两个字母各占 1 宽)。什么时候用哪个:限数据库字段长度用字节数,限界面显示用显示宽度,数「多少个字」用字符数。
- 上限填 0 是什么意思?
- 0 表示不限。原因是输入框里没有「空」这个状态,只能拿一个数当哨兵,而 0 是唯一不会被误认为有效上限的值 —— 没有哪一行是负长度。要注意的是上下限都填 0 就等于不设任何条件:「保留」模式原样输出,「删除」模式则会把所有行都删掉。
- 为什么不能用字符数代替显示宽度?
- 因为中文与英文的视觉宽度差一倍。20 个汉字的标题与 20 个英文字母的标题,字符数一样,排版宽度却差接近两倍 —— 按字符数卡出来的「不超过 20」,在中文下会明显超出设计稿。要卡的是「看上去有多宽」,就得用显示宽度。
相关工具
文本清洗
文本清洗从日志或表格里复制出来的一列内容:去重行、排序、去空行、去首尾空白、去行号、合并多空格,规则逐条开关。粘贴的内容只在本机处理。
字符清除
文本按类别清除字符:汉字、字母、数字、标点、空白、符号与 emoji 各自可勾,也能反过来只保留勾选的类别。
字数统计
文本中英混排的文本到底有多长?中文按字、英文按词分开统计,给出字符数、行数、字节数、阅读与朗读时长,以及会被切成几条短信。全部在本机完成。
文本对比
文本把两份文本逐行对比,高亮标出新增、删除与未改动的行,改动按最小差异对齐,而不是整段标成变了。全部在浏览器本地完成,内容不上传。
命名风格转换
文本在十四种命名风格之间转换标识符,拆词时认得 fooBarBaz 与 FOO_BAR 这类混写,连续大写也会按词拆开。全部在浏览器本地完成,不上传。
简繁转换
文本在简体与繁体之间互转中文,常用词整词替换,其余字取最常见写法,因此个别字词仍需人工核对。全部在浏览器本地完成,不上传。