跳到正文
豫言包管理
← 全部包

豫言操作系统文字规整 0.2.0

豫言 · 库

去首尾空白、完整 Unicode 转小写、UTF-16 长度与“全为 Unicode 字母或数字”判断,语义同 ECMAScript 的字符串方法与 Unicode 字母、数字类。

文字规整接口规范 0.2.0

本包补足标准库缺少的四个文字操作,语义与 ECMAScript 的对应字符串方法逐字符相同,使从 JS 迁来的业务在豫言里得到同样的结果:去首尾空白 等同 String.prototype.trim;转小写 等同不带区域的 String.prototype.toLowerCase;UTF16长度 等同字符串的 length;全为字母或数字吗 等同 /^[\p{L}\p{N}]+$/u.test。0.2.0 在 0.1.0 之上只增函数,旧函数签名不变。

去首尾空白 去掉首尾的 WhiteSpace 与 LineTerminator:U+0009、U+000A、U+000B、U+000C、U+000D、U+0020、U+00A0、U+1680、U+2000 至 U+200A、U+2028、U+2029、U+202F、U+205F、U+3000、U+FEFF(字节序标记)。U+0085、U+180E、U+200B 不是空白,不去掉。中间的空白不变,结果可以是空串。

转小写 按 Unicode 的完整(含特殊)大小写映射转小写,不带区域,并含词尾 Σ 的上下文规则(Final_Sigma):ΑΣ 变成 ας,词中的 Σ 变成 σ;带点大写 İ(U+0130)变成 i 加 U+0307(长度由 1 变 2 个字符);ẞ(U+1E9E)变成 ß。本已是小写或没有小写形式的字符不变。所用 Unicode 版本由宿主的 JavaScript 引擎决定,同一宿主版本下结果与 JS 一致。

UTF16长度 返回 UTF-16 码元数:基本平面字符计 1,增补平面字符(如 emoji 和部分汉字)计 2。它不同于标准库的 串长度(按通字符计数)和 字节长度(UTF-8 字节数)。迁移中依赖 JS .length 的校验(例如“邮箱不超过 254 长”)应使用本函数。

全为字母或数字吗 在字符串非空且每个码点都属 Unicode 通用类别的字母(L)或数字(N)时返回阳:汉字、假名、带音标的拉丁字母、希腊与西里尔字母、各种文字的十进制及其他数字(如全角数字、罗马数字 Ⅷ)都算;下划线、连字符、空白、标点、符号、emoji、组合记号(如单独的 U+0301)都不算;空串为阴。所用 Unicode 版本由宿主的 JavaScript 引擎决定。要接受额外字符(如下划线与连字符)的调用者,先在自己这一侧去掉这些字符,再对剩余部分调用本函数(剩余为空视为通过)。

四个函数的输入都不超过 1 MiB(UTF-8 字节,即 1048576);超出则调用失败并抛出豫言异常,不截断。四个函数不修改传入的字符串,也不做规范化(NFC、NFD)、折叠(toLocaleLowerCase、大小写折叠)之类的事;孤立代理项不存在于豫言字符串,因此不在本接口的取值范围内;输入若含非法的 UTF-8 序列,先按 WHATWG 的 UTF-8 解码规则把每个非法序列换成 U+FFFD,再作运算。

一致性样例

| 函数 | 输入 | 结果 | | --- | --- | --- | | 去首尾空白 | U+3000、空格、a b、U+3000 | a b | | 去首尾空白 | U+FEFF、x、U+FEFF | x | | 去首尾空白 | U+200B、x | 不变(U+200B 不是空白) | | 去首尾空白 | 只含空白的串 | 空串 | | 转小写 | ABC ÜÏ | abc üï | | 转小写 | İ | U+0069 U+0307 | | 转小写 | ΑΣ、ΑΣΑ、Σ | ας、ασα、σ | | UTF16长度 | abc、豫言 | 3、2 | | UTF16长度 | 😀(U+1F600) | 2 | | 全为字母或数字吗 | abc123、豫言、é、Ⅷ、12 | 阳 | | 全为字母或数字吗 | 空串、a_b、a-b、a b、😀、U+0301 | 阴 | | 任一函数 | 1 MiB 加 1 字节 | 抛出豫言异常 |

边界

本包只提供这四个操作,不含 toUpperCase、区域相关的大小写、Unicode 规范化、按 UTF-16 下标取子串等;需要时另立函数。云工适配经通用句柄桥调用宿主 JS 引擎的 String 对象,其他宿主可用等价的原生实现,只要结果与 ECMAScript 的对应方法一致。

依赖

查看包配置

上传历史

当前上传修订:1 ·

  1. 上传修订 1
    下载 ZIP

包层级

父包:豫言操作系统接口

没有子包。