コンテンツにスキップ

escape

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

escapeKeyquoteStr と似ていますが、オブジェクトのキーについて使用する関数です。便宜上、空の文字列に対しても引用符で囲います。

インポート

import { escapeKey } from "@tai-kun/surrealdb/utils";

使い方

function escapeKey(key: string): string;

引数

key

オブジェクトのキー。

返値

エスケープされた文字列を返します。必要に応じて二重引用符で囲います:

  • 与えられた文字列が空の場合
    • "" を返します。
  • 与えられた文字列が数字で始まらず、英数字とアンダースコアのみで構成される場合
    • そのまま返します。
  • 与えられた文字列に二重引用符が含まれている場合
    • それをエスケープします。
  • 与えられた文字列にバックスラッシュ (\) が含まれている場合
    • それをエスケープします。
  • 与えられた文字列が数字で始まるか、英数字とアンダースコア以外が含まれている場合
    • 二重引用符で囲います。

次の例では、文字列が英数字とアンダースコアのみで構成されるため、そのままの文字列を得ます:

import { escapeKey } from "@tai-kun/surrealdb/utils";
console.log(escapeKey(`foo_bar`));

出力:

foo_bar

次の例では、文字列を二重引用符で囲い、必要であればエスケープします:

import { escapeKey } from "@tai-kun/surrealdb/utils";
console.log(escapeKey(``));
console.log(escapeKey(`123`));
console.log(escapeKey(`foo-bar`));
console.log(escapeKey(`'\\"\\`));
console.log(escapeKey(`𩸽's "feed"`));
console.log(escapeKey(`'👍🏽"`));
console.log(escapeKey(`'パ"`));

出力:

""
"123"
"foo-bar"
"'\\"\"
"𩸽's \"feed\""
"'👍🏽\""
"'パ\""

escapeRid

escapeRidquoteStr と似ていますが、レコード 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

escapeIdentquoteStr と似ていますが、名前空間やデータベース、テーブル、フィールドの名前について使用する関数です。便宜上、空の文字列に対しても引用符で囲います。

インポート

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 から見た文字列の長さと、人間から見た文字列の長さが異なる文字を含んでいます:

種類表示.lengthUint8Array
ASCIIa1[ 0x61 ]
サロゲートペア𩸽2[ 0xF0, 0xA9, 0xB8, 0xBD ]
異体字セレクター👍🏽4[ 0xF0, 0x9F, 0x91, 0x8D, 0xF0, 0x9F, 0x8F, 0xBD ]
結合文字パ2[ 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A ]

.length の値が直感に反する場合、文字列に対する操作を慎重に考えなくてはなりません。