文字列関数 ​

このページは機械翻訳により提供されています。翻訳内容と英語版に相違がある場合は、英語版が優先されます。

文字列関数はテキストを読み取り、整形し直します。これらを使用して、インバウンドペイロードのクリーンアップ、識別子の抽出、値が宛先システムに到達する前の正規化、およびターゲットが想定する正確な文字列形式の構築を行います。

_ は、これらの例で式が受け取る入力です。詳細については、入力変数を参照してください。

機能の提供状況

WELは現在、一部のお客様にご利用いただけます。ご利用のワークスペースで利用可能かどうかを確認するには、Customer Success Representativeにお問い合わせください。

文字列関数を呼び出す ​

関数を直接呼び出すか、>>を使用して値をパイプします:

text
upper(_.status)
_.status >> upper

パイプ形式は左から右に読み取られるため、複数のステップを連結する場合に適しています。

text
_.email >> trim >> lower

パイプされた値が、関数の最初の引数に入ります。その他の引数は通常どおり記述します。

text
_.order_id >> starts_with?('SO-')

文字列は自動的に変換されません

文字列関数にはStringが必要です。数値または日付を渡すとE100が発生します。先に値をString(...)でラップします。詳細はデータ型ドキュメントを参照してください。

文字列をチェックする ​

次の関数はBooleanを返します。これらは条件、filter_by、およびステップの実行前の保護に使用します。

blank? ​

文字列が空、または空白のみを含む場合はtrueを返します。

text
blank?(string)
パラメーター説明
stringテストする文字列。
空白のみの文字列はblankです

次の例では、空白のみの文字列をテストします。

Formula

text
blank?('   ')

出力

text
true
空でない文字列はblankではありません

次の例では、空でない文字列をテストします。

Formula

text
blank?('SO-1001')

出力

text
false

empty? ​

値にコンテンツがない場合はtrueを返します。 String、List、Map、またはBinary値で機能し、blank?とは異なり、nullに対してtrueを返します。

text
empty?(value)
パラメーター説明
value文字列、リスト、マップ、バイナリ値、またはnull。
空の文字列はemptyです

次の例では、空の文字列をテストします。

Formula

text
empty?('')

出力

text
true
Nullはemptyです

次の例では、null値をテストします。

Formula

text
empty?(null)

出力

text
true

BLANK? またはEMPTY?

フィールドが完全に欠落している可能性がある場合は、nullを受け入れるempty?を使用します。フィールドは存在するが、スペースのみを含む可能性がある場合はblank?を使用します。 blank?(null)はエラーを発生させます。

contains? ​

大文字と小文字を区別する比較を使用して、文字列に部分文字列が含まれる場合はtrueを返します。

text
contains?(string, substring)
パラメーター説明
string検索する文字列。
substring検索する値。
一致する部分文字列、同じ大文字小文字

次の例では、大文字と小文字が完全に一致する部分文字列をテストします。

Formula

text
contains?('Partner account', 'Partner')

出力

text
true
一致する部分文字列、異なる大文字小文字

次の例では、大文字と小文字を除いて一致する部分文字列をテストします。

Formula

text
contains?('Partner account', 'partner')

出力

text
false

starts_with? ​

文字列がプレフィックスで始まる場合はtrueを返します。

text
starts_with?(string, prefix)
パラメーター説明
stringテストする文字列。
prefix検索するプレフィックス。
指定したプレフィックスで始まる文字列

次の例では、指定したプレフィックスで始まる文字列をテストします。

Formula

text
starts_with?('SO-1001', 'SO-')

出力

text
true

ends_with? ​

文字列がサフィックスで終わる場合はtrueを返します。

text
ends_with?(string, suffix)
パラメーター説明
stringテストする文字列。
suffix検索するサフィックス。
指定したサフィックスで終わる文字列

次の例では、指定したサフィックスで終わる文字列をテストします。

Formula

text
ends_with?('invoice.pdf', '.pdf')

出力

text
true

valid_email? ​

文字列がRFC 5321およびRFC 5322で定義されている有効なメールアドレスの場合はtrueを返します。

text
valid_email?(string)
パラメーター説明
string検証するアドレス。
有効なメールアドレス

次の例では、有効なメールアドレスをテストします。

Formula

text
valid_email?('nur@example.com')

出力

text
true
@が重複しているアドレスは無効です

次の例では、重複した@を含むアドレスをテストします。

Formula

text
valid_email?('nur@@example.com')

出力

text
false

valid_url? ​

文字列が有効なURLの場合はtrueを返します。許可されるスキームを制限するには、スキームのリストを渡します。

text
valid_url?(string)
valid_url?(string, schemes)
パラメーター説明
string検証するURL。
schemes任意です。許可されるスキームのリスト。
スキーム制限のない有効なURL

次の例では、スキーム制限のない有効なURLをテストします。

Formula

text
valid_url?('https://example.com/orders')

出力

text
true
スキームが許可リストにないURL

次の例では、スキームが許可リストにないURLをテストします。

Formula

text
valid_url?('ftp://example.com', ['http', 'https'])

出力

text
false

match? ​

文字列が正規表現に一致する場合はtrueを返します。 WELはECMAScript正規表現構文を使用します。

text
match?(string, pattern)
パラメーター説明
stringテストする文字列。
pattern正規表現。
パターンに一致する文字列

次の例では、一致するパターンに対して文字列をテストします。

Formula

text
match?('SO-1001', '^SO-\d+$')

出力

text
true

ユースケース: 区切り文字付き受信者リストをフィルタリングする ​

webhookは、間隔、大文字と小文字、形式不正なエントリが混在する受信者を1つのカンマ区切り文字列として配信します。文字列関数を使用してこれを分割し、各アドレスを正規化してから、有効なものだけを保持します。

入力

json
{
  "recipients": "a@example.com, B@Example.com ,,not-an-address"
}

Formula

text
_.recipients
  >> split(',')
  >> map_by(e ~> trim(e) >> lower)
  >> filter_by(e ~> valid_email?(e))

出力

json
["a@example.com", "b@example.com"]

splitは、1つの空文字列を含む4つのエントリを生成します。 trimとlowerはそれぞれを正規化します。 valid_email?は空のエントリとnot-an-addressの両方を破棄します。

大文字と小文字を変更する ​

次の関数は、文字列の文字の大文字と小文字を変更します。

upper ​

文字列を大文字に変換します。

text
upper(string)
パラメーター説明
string変換する文字列。
文字列を大文字に変換する

次の例では、文字列を大文字に変換します。

Formula

text
upper('acme corp')

出力

text
ACME CORP

lower ​

文字列を小文字に変換します。比較または重複排除の前にメールアドレスとコードを正規化するために使用します。

text
lower(string)
パラメーター説明
string変換する文字列。
文字列を小文字に変換する

次の例では、文字列を小文字に変換します。

Formula

text
lower('ACME Corp')

出力

text
acme corp

capitalize ​

最初の文字を大文字に変換し、残りを小文字に変換します。

text
capitalize(string)
パラメーター説明
string変換する文字列。
小文字の単語を大文字で始める

次の例では、小文字の単語の先頭を大文字にします。

Formula

text
capitalize('acme')

出力

text
Acme

titleize ​

空白で区切られた各単語の最初の文字を大文字に変換し、残りを小文字に変換します。

text
titleize(string)
パラメーター説明
string変換する文字列。
小文字のフレーズをタイトルケースにする

次の例では、小文字のフレーズをタイトルケースにします。

Formula

text
titleize('acme widgets inc')

出力

text
Acme Widgets Inc

クリーンアップとパディング ​

次の関数は、空白を削除するか、文字列を固定幅にパディングします。

trim ​

先頭と末尾の空白を削除します。

text
trim(string)
パラメーター説明
stringトリミングする文字列。
両端から空白をトリムする

次の例では、文字列の両端から空白をトリムします。

Formula

text
trim('  SO-1001  ')

出力

text
SO-1001

ltrim ​

先頭の空白を削除します。

text
ltrim(string)
パラメーター説明
stringトリミングする文字列。
先頭から空白をトリムする

次の例では、文字列の先頭から空白をトリムします。

Formula

text
ltrim('  SO-1001')

出力

text
SO-1001

rtrim ​

末尾の空白を削除します。

text
rtrim(string)
パラメーター説明
stringトリミングする文字列。
末尾から空白をトリムする

次の例では、文字列の末尾から空白をトリムします。

Formula

text
rtrim('SO-1001  ')

出力

text
SO-1001

lpad ​

指定された幅に達するまで文字列の先頭をパディングします。ゼロパディングされた参照番号と固定幅レコードに使用します。

text
lpad(string, width, pad)
パラメーター説明
stringパディングする文字列。
widthターゲット幅。
padパディング文字列。
数値を固定幅にゼロパディングする

次の例では、数値を固定幅にゼロパディングします。

Formula

text
lpad('42', 8, '0')

出力

text
00000042

rpad ​

指定された幅に達するまで文字列の末尾をパディングします。

text
rpad(string, width, pad)
パラメーター説明
stringパディングする文字列。
widthターゲット幅。
padパディング文字列。
文字列を固定幅にスペースパディングする

次の例では、文字列を固定幅にスペースパディングします。

Formula

text
rpad('A-100', 8, ' ')

出力

text
"A-100   "

8文字にパディングされます。

normalize_newlines ​

CRLF、CR、LFの行終端文字を単一の規則に書き換えます。デフォルトはLFです。

text
normalize_newlines(string, terminator)
パラメーター説明
string正規化する文字列。
terminator任意です。ターゲットの行終端文字。
混在する行終端文字をLFに正規化する

次の例では、混在する行終端文字をLFに正規化します。

Formula

text
normalize_newlines("a\r\nb\rc")

出力

text
"a\nb\nc"

ユースケース: 固定幅レコードを構築する ​

多くのERPおよびメインフレームシステムは、JSONではなく固定幅レコードを受け入れます。文字列関数を使用して各フィールドをその列幅にパディングし、それらを連結します。

入力

json
{
  "sku": "A-100",
  "qty": 2
}

Formula

text
rpad(_.sku, 10, ' ') ++ lpad(String(_.qty), 5, '0')

出力

json
"A-100     00002"

SKUは、右側がパディングされた10文字の列を占有します。数量は、左側がゼロパディングされた5文字の列を占有します。 qtyはIntegerであるため、パディングの前にString(...)で変換します。

文字列の一部を抽出する ​

次の関数は、文字列の残りの部分を変更せずに文字列の一部を読み取るか抽出します。

substring ​

コードポイントインデックスによって文字列の一部を抽出します。負の開始位置は末尾から逆に数えます。

text
substring(string, start, length)
パラメーター説明
stringソース文字列。
startゼロベースの開始インデックス。
length任意です。取得するコードポイント数。
開始インデックスから末尾まで抽出する

次の例では、開始インデックスから文字列の末尾までを抽出します。

Formula

text
substring('SO-1001', 3)

出力

text
1001
固定長の部分文字列を抽出する

次の例では、固定長の部分文字列を抽出します。

Formula

text
substring('SO-1001', 0, 2)

出力

text
SO
負の開始インデックスを使用して抽出する

次の例では、末尾から逆に数える負の開始インデックスを使用して抽出します。

Formula

text
substring('SO-1001', -4)

出力

text
1001

範囲外の開始位置はE201を発生させます

WELは、残りの文字列より長いlengthをクランプします。文字列の末尾を超えるstartはE201を発生させます。開始位置が0でない場合は、先に長さを確認してください。

index_of ​

部分文字列の最初の出現箇所のゼロベースインデックスを返します。見つからない場合は-1を返します。

text
index_of(string, substring)
パラメーター説明
string検索する文字列。
substring検索する値。
部分文字列のインデックスを検索する

次の例では、部分文字列のインデックスを検索します。

Formula

text
index_of('orders/SO-1001', '/')

出力

text
6

split ​

リテラル区切り文字で文字列をリストに分割します。

text
split(string, separator)
パラメーター説明
string分割する文字列。
separatorリテラル区切り文字。
リテラル区切り文字で文字列を分割する

次の例では、リテラル区切り文字で文字列を分割します。

Formula

text
split('a@example.com,b@example.com', ',')

出力

text
["a@example.com", "b@example.com"]

split_regex ​

正規表現で文字列をリストに分割します。区切り文字が変化する場合に使用します。

text
split_regex(string, pattern)
パラメーター説明
string分割する文字列。
pattern区切り文字に一致する正規表現。
変化する区切り文字で文字列を分割する

次の例では、エントリ間で変化する区切り文字で文字列を分割します。

Formula

text
split_regex('A-100; B-220,C-050', '[;,]\s*')

出力

text
["A-100", "B-220", "C-050"]

match ​

最初の正規表現一致をマップとして返します。一致がない場合はnullを返します。キー0は完全一致、数値キーは各キャプチャグループを保持し、名前付きキャプチャも名前で使用できます。

text
match(string, pattern)
パラメーター説明
string検索する文字列。
pattern正規表現。
名前付きキャプチャグループを使用してパターンに一致させる

次の例では、名前付きキャプチャグループを使用してパターンに一致させます。

Formula

text
match('SO-1001', '^(?<prefix>[A-Z]+)-(?<number>\d+)$')

出力

text
{"0": "SO-1001", "1": "SO", "2": "1001", prefix: "SO", number: "1001"}

キャプチャグループに名前を付ける

名前付きキャプチャはFormulaを読みやすくし、グループを追加しても機能し続けるようにします。結果はmatch(...)['2']ではなくmatch(...).numberとして読み取ります。

match_all ​

すべての正規表現一致を、matchと同じキー構造を使用してマップのリストとして返します。

text
match_all(string, pattern)
パラメーター説明
string検索する文字列。
pattern正規表現。
パターンのすべての出現箇所に一致させる

次の例では、パターンのすべての出現箇所に一致させます。

Formula

text
match_all('A-100 B-220', '[A-Z]-\d+')

出力

text
[{"0": "A-100"}, {"0": "B-220"}]

parse_url ​

URLをそのコンポーネントに解析します。

text
parse_url(string)
パラメーター説明
string解析するURL。
URLをそのコンポーネントに解析する

次の例では、URLをそのコンポーネントに解析します。

Formula

text
parse_url('https://api.example.com:8443/v2/orders?status=open#top')

出力

text
{scheme: "https", host: "api.example.com", port: 8443, path: "/v2/orders", query: "status=open", fragment: "top"}

ユースケース: コールバックパスから識別子を抽出する ​

インバウンドコールバックは、URLパス内に注文番号を保持します。セグメントの位置に依存せずに取り出すには、名前付きキャプチャグループを使用します。

入力

json
{
  "path": "/orders/SO-1001/lines"
}

Formula

text
match(_.path, '/orders/(?<order>[A-Z]{2}-\d+)/').order

出力

json
"SO-1001"

matchはマップを返すため、Formulaはorderキーを直接読み取ります。パスが一致しない場合、matchはnullを返し、その結果としてキーの読み取りは失敗します。ソースデータが変化する場合は、|?でフォールバックを追加します。詳細は演算子ドキュメントを参照してください。

文字列の一部を置換する ​

WELには、リテラルマッチングと正規表現マッチング用の別々の関数があります。それぞれに、最初の一致とすべての一致の形式があります。

機能一致対象置換対象
replace_firstリテラルテキスト最初の出現箇所
replace_allリテラルテキストすべての出現箇所
replace_first_regex, sub正規表現最初の一致
replace_all_regex, gsub正規表現すべての一致

replace_all ​

リテラル部分文字列のすべての出現箇所を置換します。

text
replace_all(string, pattern, replacement)
パラメーター説明
stringソース文字列。
pattern検索するリテラルテキスト。
replacement置換テキスト。
リテラル部分文字列のすべての出現箇所を削除する

次の例では、リテラル部分文字列のすべての出現箇所を削除します。

Formula

text
replace_all('A-100-X', '-', '')

出力

text
A100X

replace_first ​

リテラル部分文字列の最初の出現箇所を置換します。

text
replace_first(string, pattern, replacement)
パラメーター説明
stringソース文字列。
pattern検索するリテラルテキスト。
replacement置換テキスト。
リテラル部分文字列の最初の出現箇所を削除する

次の例では、リテラル部分文字列の最初の出現箇所を削除します。

Formula

text
replace_first('A-100-X', '-', '')

出力

text
A100-X

replace_all_regex ​

すべての正規表現一致を置換します。 gsubはエイリアスです。

text
replace_all_regex(string, pattern, replacement)
パラメーター説明
stringソース文字列。
pattern正規表現。
replacement置換テキスト。
繰り返しの空白を1つのスペースにまとめる

次の例では、繰り返しの空白を1つのスペースにまとめます。

Formula

text
replace_all_regex('SO 1001  extra', '\s+', ' ')

出力

text
SO 1001 extra
gsubエイリアスを使用して数字以外の文字を除去する

次の例では、gsubエイリアスを使用して数字以外のすべての文字を除去します。

Formula

text
gsub('(555) 123-4567', '[^0-9]', '')

出力

text
5551234567

replace_first_regex ​

最初の正規表現一致を置換します。 subはエイリアスです。

text
replace_first_regex(string, pattern, replacement)
パラメーター説明
stringソース文字列。
pattern正規表現。
replacement置換テキスト。
subエイリアスを使用して最初のregex一致を置換する

次の例では、subエイリアスを使用して最初の正規表現一致を置換します。

Formula

text
sub('SO-1001', '^SO', 'PO')

出力

text
PO-1001

concat ​

2つの文字列を結合します。 2つを超える文字列を結合する場合、または他の型を混在させる場合は、++または文字列補間を使用します。

text
concat(first, second)
パラメーター説明
first最初の文字列。
second2番目の文字列。
2つの文字列を結合する

次の例では、2つの文字列を結合します。

Formula

text
concat('Josh', ' Ito')

出力

text
Josh Ito

CONCATは正確に2つの引数を取ります

concatは可変長引数ではありません。複数の値を結合するには++を使用し、テンプレートに埋め込むには補間を使用します。

text
_.first_name ++ ' ' ++ _.last_name
"Order ${_.order_id} for ${_.customer}"

補間は値を自動的に文字列に変換します。 ++は変換しません。詳細は文字列とフォーマットドキュメントを参照してください。

ユースケース: インバウンド連絡先を正規化する ​

サインアップwebhookは、間隔と大文字小文字が一貫しない名前、およびダウンストリームCRMが大文字と小文字を区別して扱うメールアドレスを配信します。レコードが作成される前に、文字列関数を使用して3つのフィールドすべてを正規化します。

入力

json
{
  "first_name": "  josh ",
  "last_name": "ITO",
  "email": " Josh@Example.COM "
}

Formula

text
{
  full_name: titleize(trim(_.first_name) ++ ' ' ++ trim(_.last_name)),
  email: lower(trim(_.email))
}

出力

json
{
  "full_name": "Josh Ito",
  "email": "josh@example.com"
}

trimは、++で結合する前に各フィールドから空白を削除するため、結合用のスペースが名前の間にある唯一のスペースになります。その後、titleizeが両方の名前の大文字小文字を一度に修正します。 lowerは、入力方法に関係なく既存のCRMレコードと一致するようにアドレスを正規化します。

最終更新日: