转义函数
quoteStr
quoteStr
函数用于将字符串用引号括起来。为方便起见,即使是空字符串也会用引号括起来。
导入
import { quoteStr } from "@tai-kun/surrealdb/utils";
使用方法
function quoteStr(str: string): string;
将字符串用引号("
或 '
) 括起来。
参数
str
需要用引号括起来的字符串。
返回值
返回用引号括起来的字符串。使用的引号取决于给定字符串是否包含单引号('
):
- 如果给定字符串为空
- 返回
''
。
- 返回
- 如果给定字符串不包含单引号
- 用单引号括起来。
- 如果给定字符串包含单引号
- 用双引号括起来。
- 如果给定字符串同时包含单引号和双引号
- 用双引号括起来。
- 双引号用反斜杠 (
\
) 转义。
例子
以下示例演示如何用单引号括起不包含单引号的字符串:
import { quoteStr } from "@tai-kun/surrealdb/utils";
console.log(quoteStr(``));console.log(quoteStr(`a`));console.log(quoteStr(`𩸽`));console.log(quoteStr(`👍🏽`));console.log(quoteStr(`パ`));
输出:
'''a''𩸽''👍🏽''パ'
以下示例演示如何用双引号括起包含单引号的字符串:
import { quoteStr } from "@tai-kun/surrealdb/utils";
console.log(quoteStr(`cat's`));console.log(quoteStr(`𩸽's`));console.log(quoteStr(`'👍🏽`));console.log(quoteStr(`'パ`));
输出:
"cat's""𩸽's""'👍🏽""'パ"
以下示例演示如何用双引号括起同时包含单引号和双引号的字符串,并在需要时进行转义:
import { quoteStr } from "@tai-kun/surrealdb/utils";
console.log(quoteStr(`cat's "toy"`));console.log(quoteStr(`'\\"\\`));console.log(quoteStr(`𩸽's "feed"`));console.log(quoteStr(`'👍🏽"`));console.log(quoteStr(`'パ"`));
输出:
"cat's \"toy\"""'\\\"\\""𩸽's \"feed\"""'👍🏽\"""'パ\""
escapeKey
escapeKey
与 quoteStr
类似,但用于对象键。为方便起见,即使是空字符串也会用引号括起来。
导入
import { escapeKey } from "@tai-kun/surrealdb/utils";
使用方法
function escapeKey(key: string): string;
参数
key
对象的键。
返回值
返回转义后的字符串。根据需要用双引号括起来:
- 如果给定字符串为空
- 返回
""
。
- 返回
- 如果给定字符串仅由字母数字和下划线组成
- 直接返回。
- 如果给定字符串包含字母数字和下划线以外的字符
- 用双引号括起来。
- 如果给定字符串包含反斜杠 (
\
)- 进行转义。
- 如果给定字符串包含双引号
- 进行转义。
例子
以下示例演示如果字符串仅由字母数字和下划线组成,则直接返回字符串:
import { escapeKey } from "@tai-kun/surrealdb/utils";
console.log(escapeKey(`123`));console.log(escapeKey(`foo_bar`));
输出:
123foo_bar
以下示例演示如何用双引号括起字符串,并在需要时进行转义:
import { escapeKey } from "@tai-kun/surrealdb/utils";
console.log(escapeKey(``));console.log(escapeKey(`foo-bar`));console.log(escapeKey(`'\\"\\`));console.log(escapeKey(`𩸽's "feed"`));console.log(escapeKey(`'👍🏽"`));console.log(escapeKey(`'パ"`));
输出:
"""foo-bar""'\\"\""𩸽's \"feed\"""'👍🏽\"""'パ\""
escapeRid
escapeRid
与 quoteStr
类似,但用于记录 ID。为方便起见,即使是空字符串也会用引号括起来。
导入
import { escapeRid } from "@tai-kun/surrealdb/utils";
使用方法
function escapeRid(rid: string): string;
参数
rid
记录 ID 的 ID 部分。
返回值
返回转义后的字符串。根据需要用尖括号 (⟨⟩
) 括起来:
- 如果给定字符串为空
- 返回
⟨⟩
。
- 返回
- 如果给定字符串不以数字开头,并且仅由字母数字和下划线组成
- 直接返回。
- 如果给定字符串包含尖括号 (
⟩
)- 进行转义。
- 如果给定字符串以数字开头,或者包含字母数字和下划线以外的字符
- 用尖括号 (
⟨⟩
) 括起来。
- 用尖括号 (
例子
以下示例演示如果字符串不以数字开头,并且仅由字母数字和下划线组成,则直接返回字符串:
import { escapeRid } from "@tai-kun/surrealdb/utils";
console.log(escapeRid(`foo_123`));
输出:
foo_123
以下示例演示如何用尖括号 (⟨⟩
) 括起字符串,并在需要时进行转义:
import { escapeRid } from "@tai-kun/surrealdb/utils";
console.log(escapeRid(``));console.log(escapeRid(`123`));console.log(escapeRid(`foo-bar`));console.log(escapeRid(`𩸽's ⟨feed⟩`));console.log(escapeRid(`'👍🏽⟩`));console.log(escapeRid(`'パ⟩`));
输出:
⟨⟩⟨123⟩⟨foo-bar⟩⟨𩸽's ⟨feed\⟩⟩⟨'👍🏽\⟩⟩⟨'パ\⟩⟩
escapeIdent
escapeIdent
与 quoteStr
类似,但用于命名空间、数据库、表和字段名称。为方便起见,即使是空字符串也会用引号括起来。
导入
import { escapeIdent } from "@tai-kun/surrealdb/utils";
使用方法
function escapeIdent(ident: string): string;
参数
ident
标识符。
返回值
返回转义后的字符串。根据需要用反引号 (`
) 括起来:
- 如果给定字符串为空
- 返回
- 返回
- 如果给定字符串不以数字开头,并且仅由字母数字和下划线组成
- 直接返回。
- 如果给定字符串包含反引号 (
`
)- 进行转义。
- 如果给定字符串以数字开头,或者包含字母数字和下划线以外的字符
- 用反引号 (
`
) 括起来。
- 用反引号 (
例子
以下示例演示如果字符串不以数字开头,并且仅由字母数字和下划线组成,则直接返回字符串:
import { escapeIdent } from "@tai-kun/surrealdb/utils";
console.log(escapeIdent(`foo_123`));
输出:
foo_123
以下示例演示如何用反引号 (`
) 括起字符串,并在需要时进行转义:
import { escapeIdent } from "@tai-kun/surrealdb/utils";
console.log(escapeIdent(""));console.log(escapeIdent("123"));console.log(escapeIdent("foo-bar"));console.log(escapeIdent("𩸽's `feed`"));console.log(escapeIdent("'👍🏽`"));console.log(escapeIdent("'パ`"));
输出:
```123``foo-bar``𩸽's \`feed\```'👍🏽\```'パ\``
专栏
字符串长度
前面示例中使用的字符串包含一些其 JavaScript 字符串长度与人类感知的长度不同的字符:
类型 | 显示 | .length | Uint8Array |
---|---|---|---|
ASCII | a | 1 | [ 0x61 ] |
代理对 | 𩸽 | 2 | [ 0xF0, 0xA9, 0xB8, 0xBD ] |
变体选择器 | 👍🏽 | 4 | [ 0xF0, 0x9F, 0x91, 0x8D, 0xF0, 0x9F, 0x8F, 0xBD ] |
组合字符 | パ | 2 | [ 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A ] |
当 .length
的值与直觉不符时,需要谨慎处理字符串操作。