文字列関数
文字列関数はテキストを読み取り、整形し直します。これらを使用して、インバウンドペイロードのクリーンアップ、識別子の抽出、値が宛先システムに到達する前の正規化、およびターゲットが想定する正確な文字列形式の構築を行います。
_ は、これらの例で式が受け取る入力です。詳細については、入力変数を参照してください。
機能の提供状況
WELは現在、一部のお客様にご利用いただけます。ご利用のワークスペースで利用可能かどうかを確認するには、Customer Success Representativeにお問い合わせください。
文字列関数を呼び出す
関数を直接呼び出すか、>>を使用して値をパイプします:
upper(_.status)
_.status >> upperパイプ形式は左から右に読み取られるため、複数のステップを連結する場合に適しています。
_.email >> trim >> lowerパイプされた値が、関数の最初の引数に入ります。その他の引数は通常どおり記述します。
_.order_id >> starts_with?('SO-')文字列は自動的に変換されません
文字列関数にはStringが必要です。数値または日付を渡すとE100が発生します。先に値をString(...)でラップします。詳細はデータ型ドキュメントを参照してください。
文字列をチェックする
次の関数はBooleanを返します。これらは条件、filter_by、およびステップの実行前の保護に使用します。
blank?
文字列が空、または空白のみを含む場合はtrueを返します。
blank?(string)| パラメーター | 説明 |
|---|---|
| string | テストする文字列。 |
空白のみの文字列はblankです
次の例では、空白のみの文字列をテストします。
Formula
blank?(' ')出力
true空でない文字列はblankではありません
次の例では、空でない文字列をテストします。
Formula
blank?('SO-1001')出力
falseempty?
値にコンテンツがない場合はtrueを返します。 String、List、Map、またはBinary値で機能し、blank?とは異なり、nullに対してtrueを返します。
empty?(value)| パラメーター | 説明 |
|---|---|
| value | 文字列、リスト、マップ、バイナリ値、またはnull。 |
空の文字列はemptyです
次の例では、空の文字列をテストします。
Formula
empty?('')出力
trueNullはemptyです
次の例では、null値をテストします。
Formula
empty?(null)出力
trueBLANK? またはEMPTY?
フィールドが完全に欠落している可能性がある場合は、nullを受け入れるempty?を使用します。フィールドは存在するが、スペースのみを含む可能性がある場合はblank?を使用します。 blank?(null)はエラーを発生させます。
contains?
大文字と小文字を区別する比較を使用して、文字列に部分文字列が含まれる場合はtrueを返します。
contains?(string, substring)| パラメーター | 説明 |
|---|---|
| string | 検索する文字列。 |
| substring | 検索する値。 |
一致する部分文字列、同じ大文字小文字
次の例では、大文字と小文字が完全に一致する部分文字列をテストします。
Formula
contains?('Partner account', 'Partner')出力
true一致する部分文字列、異なる大文字小文字
次の例では、大文字と小文字を除いて一致する部分文字列をテストします。
Formula
contains?('Partner account', 'partner')出力
falsestarts_with?
文字列がプレフィックスで始まる場合はtrueを返します。
starts_with?(string, prefix)| パラメーター | 説明 |
|---|---|
| string | テストする文字列。 |
| prefix | 検索するプレフィックス。 |
指定したプレフィックスで始まる文字列
次の例では、指定したプレフィックスで始まる文字列をテストします。
Formula
starts_with?('SO-1001', 'SO-')出力
trueends_with?
文字列がサフィックスで終わる場合はtrueを返します。
ends_with?(string, suffix)| パラメーター | 説明 |
|---|---|
| string | テストする文字列。 |
| suffix | 検索するサフィックス。 |
指定したサフィックスで終わる文字列
次の例では、指定したサフィックスで終わる文字列をテストします。
Formula
ends_with?('invoice.pdf', '.pdf')出力
truevalid_email?
文字列がRFC 5321およびRFC 5322で定義されている有効なメールアドレスの場合はtrueを返します。
valid_email?(string)| パラメーター | 説明 |
|---|---|
| string | 検証するアドレス。 |
有効なメールアドレス
次の例では、有効なメールアドレスをテストします。
Formula
valid_email?('nur@example.com')出力
true@が重複しているアドレスは無効です
次の例では、重複した@を含むアドレスをテストします。
Formula
valid_email?('nur@@example.com')出力
falsevalid_url?
文字列が有効なURLの場合はtrueを返します。許可されるスキームを制限するには、スキームのリストを渡します。
valid_url?(string)
valid_url?(string, schemes)| パラメーター | 説明 |
|---|---|
| string | 検証するURL。 |
| schemes | 任意です。許可されるスキームのリスト。 |
スキーム制限のない有効なURL
次の例では、スキーム制限のない有効なURLをテストします。
Formula
valid_url?('https://example.com/orders')出力
trueスキームが許可リストにないURL
次の例では、スキームが許可リストにないURLをテストします。
Formula
valid_url?('ftp://example.com', ['http', 'https'])出力
falsematch?
文字列が正規表現に一致する場合はtrueを返します。 WELはECMAScript正規表現構文を使用します。
match?(string, pattern)| パラメーター | 説明 |
|---|---|
| string | テストする文字列。 |
| pattern | 正規表現。 |
パターンに一致する文字列
次の例では、一致するパターンに対して文字列をテストします。
Formula
match?('SO-1001', '^SO-\d+$')出力
trueユースケース: 区切り文字付き受信者リストをフィルタリングする
webhookは、間隔、大文字と小文字、形式不正なエントリが混在する受信者を1つのカンマ区切り文字列として配信します。文字列関数を使用してこれを分割し、各アドレスを正規化してから、有効なものだけを保持します。
入力
{
"recipients": "a@example.com, B@Example.com ,,not-an-address"
}Formula
_.recipients
>> split(',')
>> map_by(e ~> trim(e) >> lower)
>> filter_by(e ~> valid_email?(e))出力
["a@example.com", "b@example.com"]splitは、1つの空文字列を含む4つのエントリを生成します。 trimとlowerはそれぞれを正規化します。 valid_email?は空のエントリとnot-an-addressの両方を破棄します。
大文字と小文字を変更する
次の関数は、文字列の文字の大文字と小文字を変更します。
upper
文字列を大文字に変換します。
upper(string)| パラメーター | 説明 |
|---|---|
| string | 変換する文字列。 |
文字列を大文字に変換する
次の例では、文字列を大文字に変換します。
Formula
upper('acme corp')出力
ACME CORPlower
文字列を小文字に変換します。比較または重複排除の前にメールアドレスとコードを正規化するために使用します。
lower(string)| パラメーター | 説明 |
|---|---|
| string | 変換する文字列。 |
文字列を小文字に変換する
次の例では、文字列を小文字に変換します。
Formula
lower('ACME Corp')出力
acme corpcapitalize
最初の文字を大文字に変換し、残りを小文字に変換します。
capitalize(string)| パラメーター | 説明 |
|---|---|
| string | 変換する文字列。 |
小文字の単語を大文字で始める
次の例では、小文字の単語の先頭を大文字にします。
Formula
capitalize('acme')出力
Acmetitleize
空白で区切られた各単語の最初の文字を大文字に変換し、残りを小文字に変換します。
titleize(string)| パラメーター | 説明 |
|---|---|
| string | 変換する文字列。 |
小文字のフレーズをタイトルケースにする
次の例では、小文字のフレーズをタイトルケースにします。
Formula
titleize('acme widgets inc')出力
Acme Widgets Incクリーンアップとパディング
次の関数は、空白を削除するか、文字列を固定幅にパディングします。
trim
先頭と末尾の空白を削除します。
trim(string)| パラメーター | 説明 |
|---|---|
| string | トリミングする文字列。 |
両端から空白をトリムする
次の例では、文字列の両端から空白をトリムします。
Formula
trim(' SO-1001 ')出力
SO-1001ltrim
先頭の空白を削除します。
ltrim(string)| パラメーター | 説明 |
|---|---|
| string | トリミングする文字列。 |
先頭から空白をトリムする
次の例では、文字列の先頭から空白をトリムします。
Formula
ltrim(' SO-1001')出力
SO-1001rtrim
末尾の空白を削除します。
rtrim(string)| パラメーター | 説明 |
|---|---|
| string | トリミングする文字列。 |
末尾から空白をトリムする
次の例では、文字列の末尾から空白をトリムします。
Formula
rtrim('SO-1001 ')出力
SO-1001lpad
指定された幅に達するまで文字列の先頭をパディングします。ゼロパディングされた参照番号と固定幅レコードに使用します。
lpad(string, width, pad)| パラメーター | 説明 |
|---|---|
| string | パディングする文字列。 |
| width | ターゲット幅。 |
| pad | パディング文字列。 |
数値を固定幅にゼロパディングする
次の例では、数値を固定幅にゼロパディングします。
Formula
lpad('42', 8, '0')出力
00000042rpad
指定された幅に達するまで文字列の末尾をパディングします。
rpad(string, width, pad)| パラメーター | 説明 |
|---|---|
| string | パディングする文字列。 |
| width | ターゲット幅。 |
| pad | パディング文字列。 |
文字列を固定幅にスペースパディングする
次の例では、文字列を固定幅にスペースパディングします。
Formula
rpad('A-100', 8, ' ')出力
"A-100 "8文字にパディングされます。
normalize_newlines
CRLF、CR、LFの行終端文字を単一の規則に書き換えます。デフォルトはLFです。
normalize_newlines(string, terminator)| パラメーター | 説明 |
|---|---|
| string | 正規化する文字列。 |
| terminator | 任意です。ターゲットの行終端文字。 |
混在する行終端文字をLFに正規化する
次の例では、混在する行終端文字をLFに正規化します。
Formula
normalize_newlines("a\r\nb\rc")出力
"a\nb\nc"ユースケース: 固定幅レコードを構築する
多くのERPおよびメインフレームシステムは、JSONではなく固定幅レコードを受け入れます。文字列関数を使用して各フィールドをその列幅にパディングし、それらを連結します。
入力
{
"sku": "A-100",
"qty": 2
}Formula
rpad(_.sku, 10, ' ') ++ lpad(String(_.qty), 5, '0')出力
"A-100 00002"SKUは、右側がパディングされた10文字の列を占有します。数量は、左側がゼロパディングされた5文字の列を占有します。 qtyはIntegerであるため、パディングの前にString(...)で変換します。
文字列の一部を抽出する
次の関数は、文字列の残りの部分を変更せずに文字列の一部を読み取るか抽出します。
substring
コードポイントインデックスによって文字列の一部を抽出します。負の開始位置は末尾から逆に数えます。
substring(string, start, length)| パラメーター | 説明 |
|---|---|
| string | ソース文字列。 |
| start | ゼロベースの開始インデックス。 |
| length | 任意です。取得するコードポイント数。 |
開始インデックスから末尾まで抽出する
次の例では、開始インデックスから文字列の末尾までを抽出します。
Formula
substring('SO-1001', 3)出力
1001固定長の部分文字列を抽出する
次の例では、固定長の部分文字列を抽出します。
Formula
substring('SO-1001', 0, 2)出力
SO負の開始インデックスを使用して抽出する
次の例では、末尾から逆に数える負の開始インデックスを使用して抽出します。
Formula
substring('SO-1001', -4)出力
1001範囲外の開始位置はE201を発生させます
WELは、残りの文字列より長いlengthをクランプします。文字列の末尾を超えるstartはE201を発生させます。開始位置が0でない場合は、先に長さを確認してください。
index_of
部分文字列の最初の出現箇所のゼロベースインデックスを返します。見つからない場合は-1を返します。
index_of(string, substring)| パラメーター | 説明 |
|---|---|
| string | 検索する文字列。 |
| substring | 検索する値。 |
部分文字列のインデックスを検索する
次の例では、部分文字列のインデックスを検索します。
Formula
index_of('orders/SO-1001', '/')出力
6split
リテラル区切り文字で文字列をリストに分割します。
split(string, separator)| パラメーター | 説明 |
|---|---|
| string | 分割する文字列。 |
| separator | リテラル区切り文字。 |
リテラル区切り文字で文字列を分割する
次の例では、リテラル区切り文字で文字列を分割します。
Formula
split('a@example.com,b@example.com', ',')出力
["a@example.com", "b@example.com"]split_regex
正規表現で文字列をリストに分割します。区切り文字が変化する場合に使用します。
split_regex(string, pattern)| パラメーター | 説明 |
|---|---|
| string | 分割する文字列。 |
| pattern | 区切り文字に一致する正規表現。 |
変化する区切り文字で文字列を分割する
次の例では、エントリ間で変化する区切り文字で文字列を分割します。
Formula
split_regex('A-100; B-220,C-050', '[;,]\s*')出力
["A-100", "B-220", "C-050"]match
最初の正規表現一致をマップとして返します。一致がない場合はnullを返します。キー0は完全一致、数値キーは各キャプチャグループを保持し、名前付きキャプチャも名前で使用できます。
match(string, pattern)| パラメーター | 説明 |
|---|---|
| string | 検索する文字列。 |
| pattern | 正規表現。 |
名前付きキャプチャグループを使用してパターンに一致させる
次の例では、名前付きキャプチャグループを使用してパターンに一致させます。
Formula
match('SO-1001', '^(?<prefix>[A-Z]+)-(?<number>\d+)$')出力
{"0": "SO-1001", "1": "SO", "2": "1001", prefix: "SO", number: "1001"}キャプチャグループに名前を付ける
名前付きキャプチャはFormulaを読みやすくし、グループを追加しても機能し続けるようにします。結果はmatch(...)['2']ではなくmatch(...).numberとして読み取ります。
match_all
すべての正規表現一致を、matchと同じキー構造を使用してマップのリストとして返します。
match_all(string, pattern)| パラメーター | 説明 |
|---|---|
| string | 検索する文字列。 |
| pattern | 正規表現。 |
パターンのすべての出現箇所に一致させる
次の例では、パターンのすべての出現箇所に一致させます。
Formula
match_all('A-100 B-220', '[A-Z]-\d+')出力
[{"0": "A-100"}, {"0": "B-220"}]parse_url
URLをそのコンポーネントに解析します。
parse_url(string)| パラメーター | 説明 |
|---|---|
| string | 解析するURL。 |
URLをそのコンポーネントに解析する
次の例では、URLをそのコンポーネントに解析します。
Formula
parse_url('https://api.example.com:8443/v2/orders?status=open#top')出力
{scheme: "https", host: "api.example.com", port: 8443, path: "/v2/orders", query: "status=open", fragment: "top"}ユースケース: コールバックパスから識別子を抽出する
インバウンドコールバックは、URLパス内に注文番号を保持します。セグメントの位置に依存せずに取り出すには、名前付きキャプチャグループを使用します。
入力
{
"path": "/orders/SO-1001/lines"
}Formula
match(_.path, '/orders/(?<order>[A-Z]{2}-\d+)/').order出力
"SO-1001"matchはマップを返すため、Formulaはorderキーを直接読み取ります。パスが一致しない場合、matchはnullを返し、その結果としてキーの読み取りは失敗します。ソースデータが変化する場合は、|?でフォールバックを追加します。詳細は演算子ドキュメントを参照してください。
文字列の一部を置換する
WELには、リテラルマッチングと正規表現マッチング用の別々の関数があります。それぞれに、最初の一致とすべての一致の形式があります。
| 機能 | 一致対象 | 置換対象 |
|---|---|---|
replace_first | リテラルテキスト | 最初の出現箇所 |
replace_all | リテラルテキスト | すべての出現箇所 |
replace_first_regex, sub | 正規表現 | 最初の一致 |
replace_all_regex, gsub | 正規表現 | すべての一致 |
replace_all
リテラル部分文字列のすべての出現箇所を置換します。
replace_all(string, pattern, replacement)| パラメーター | 説明 |
|---|---|
| string | ソース文字列。 |
| pattern | 検索するリテラルテキスト。 |
| replacement | 置換テキスト。 |
リテラル部分文字列のすべての出現箇所を削除する
次の例では、リテラル部分文字列のすべての出現箇所を削除します。
Formula
replace_all('A-100-X', '-', '')出力
A100Xreplace_first
リテラル部分文字列の最初の出現箇所を置換します。
replace_first(string, pattern, replacement)| パラメーター | 説明 |
|---|---|
| string | ソース文字列。 |
| pattern | 検索するリテラルテキスト。 |
| replacement | 置換テキスト。 |
リテラル部分文字列の最初の出現箇所を削除する
次の例では、リテラル部分文字列の最初の出現箇所を削除します。
Formula
replace_first('A-100-X', '-', '')出力
A100-Xreplace_all_regex
すべての正規表現一致を置換します。 gsubはエイリアスです。
replace_all_regex(string, pattern, replacement)| パラメーター | 説明 |
|---|---|
| string | ソース文字列。 |
| pattern | 正規表現。 |
| replacement | 置換テキスト。 |
繰り返しの空白を1つのスペースにまとめる
次の例では、繰り返しの空白を1つのスペースにまとめます。
Formula
replace_all_regex('SO 1001 extra', '\s+', ' ')出力
SO 1001 extragsubエイリアスを使用して数字以外の文字を除去する
次の例では、gsubエイリアスを使用して数字以外のすべての文字を除去します。
Formula
gsub('(555) 123-4567', '[^0-9]', '')出力
5551234567replace_first_regex
最初の正規表現一致を置換します。 subはエイリアスです。
replace_first_regex(string, pattern, replacement)| パラメーター | 説明 |
|---|---|
| string | ソース文字列。 |
| pattern | 正規表現。 |
| replacement | 置換テキスト。 |
subエイリアスを使用して最初のregex一致を置換する
次の例では、subエイリアスを使用して最初の正規表現一致を置換します。
Formula
sub('SO-1001', '^SO', 'PO')出力
PO-1001concat
2つの文字列を結合します。 2つを超える文字列を結合する場合、または他の型を混在させる場合は、++または文字列補間を使用します。
concat(first, second)| パラメーター | 説明 |
|---|---|
| first | 最初の文字列。 |
| second | 2番目の文字列。 |
2つの文字列を結合する
次の例では、2つの文字列を結合します。
Formula
concat('Josh', ' Ito')出力
Josh ItoCONCATは正確に2つの引数を取ります
concatは可変長引数ではありません。複数の値を結合するには++を使用し、テンプレートに埋め込むには補間を使用します。
_.first_name ++ ' ' ++ _.last_name
"Order ${_.order_id} for ${_.customer}"補間は値を自動的に文字列に変換します。 ++は変換しません。詳細は文字列とフォーマットドキュメントを参照してください。
ユースケース: インバウンド連絡先を正規化する
サインアップwebhookは、間隔と大文字小文字が一貫しない名前、およびダウンストリームCRMが大文字と小文字を区別して扱うメールアドレスを配信します。レコードが作成される前に、文字列関数を使用して3つのフィールドすべてを正規化します。
入力
{
"first_name": " josh ",
"last_name": "ITO",
"email": " Josh@Example.COM "
}Formula
{
full_name: titleize(trim(_.first_name) ++ ' ' ++ trim(_.last_name)),
email: lower(trim(_.email))
}出力
{
"full_name": "Josh Ito",
"email": "josh@example.com"
}trimは、++で結合する前に各フィールドから空白を削除するため、結合用のスペースが名前の間にある唯一のスペースになります。その後、titleizeが両方の名前の大文字小文字を一度に修正します。 lowerは、入力方法に関係なく既存のCRMレコードと一致するようにアドレスを正規化します。
関連情報
- データ型: 文字列関数に
Stringが必要な理由。 - 文字列とフォーマット: 補間、f文字列、フォーマット仕様に関する情報。
- 演算子:
++、パイプ>>、フォールバック演算子に関する情報。 - エラーコード:
E100やE201などのジョブ失敗をトラブルシューティングします。
最終更新日: