json-eval-rs 0.0.99

High-performance JSON Logic evaluator with schema validation and dependency tracking. Built on blazing-fast Rust engine.
Documentation
---
title: 'String'
description: "Operator manipulasi teks dan pemrosesan string."
navigation:
  icon: 'i-ph-code-block'
seo:
  title: 'String'
  description: "Operator manipulasi teks dan pemrosesan string."
---

## Tinjauan

Operator string menyediakan kemampuan manipulasi teks yang komprehensif untuk memformat, mengurai, mencari, dan mengubah data string. Operator ini sangat penting untuk membangun pesan bagi pengguna, mengurai input, dan bekerja dengan format data berbasis teks.

### Kasus Penggunaan Umum

- **Penggabungan**: Membangun pesan, label, dan output terformat dengan `cat`.
- **Ekstraksi**: Mengambil bagian teks dengan `substr`, `left`, `right`, `mid`.
- **Parsing**: Memecah data dengan pemisah tertentu menggunakan `splittext`, `splitvalue`.
- **Pencarian**: Menemukan teks di dalam string menggunakan `search`.
- **Pemformatan**: Menampilkan angka sebagai mata uang atau persentase dengan `stringformat`.
- **Validasi**: Memeriksa panjang string, pola, dan konten.

### Kompatibilitas Excel

Operator dengan varian huruf besar (misalnya, `CONCAT`, `SEARCH`, `LEFT`) mengikuti konvensi Excel untuk kompatibilitas maksimum dengan rumus spreadsheet.

---

## `cat` - Concatenate

Menggabungkan beberapa nilai menjadi sebuah string tunggal.

### Sintaks
```json
{"cat": [value1, value2, ...]}
```

### Parameter
- **values** (array): Nilai yang akan digabungkan (akan dikoersi ke string)

### Tipe Kembalian
String - Hasil penggabungan

### Contoh

**Penggabungan dasar:**
```json
{"cat": ["Halo", " ", "Dunia"]}  // → "Halo Dunia"
{"cat": ["User: ", "Alice"]}      // → "User: Alice"
```

**Dengan angka:**
```json
{"cat": ["Total: ", 42]}          // → "Total: 42"
{"cat": ["$", 99.99]}             // → "$99.99"
```

---

## `substr` - Substring

Mengambil bagian (substring) dari sebuah string.

### Sintaks
```json
{"substr": [string, start, length]}
{"substr": [string, start]}
```

### Parameter
- **string** (string): String sumber
- **start** (number): Indeks mulai (berbasis 0)
- **length** (number, opsional): Jumlah karakter yang akan diambil

### Contoh

**Substring dasar:**
```json
{"substr": ["Hello World", 0, 5]}   // → "Hello"
{"substr": ["Hello World", 6, 5]}   // → "World"
```

**Indeks negatif (dari belakang):**
```json
{"substr": ["Hello World", -5]}     // → "World" (5 karakter terakhir)
```

---

## `search` / `SEARCH` - Cari Substring

Mencari substring di dalam sebuah string (case-insensitive). Mengembalikan indeks berbasis 1.

### Sintaks
```json
{"search": [find_text, within_text, start_num]}
```

### Parameter
- **find_text** (string): Teks yang dicari
- **within_text** (string): Teks tempat mencari
- **start_num** (number, opsional): Posisi mulai mencari (berbasis 1)

### Tipe Kembalian
Number - Posisi match pertama (berbasis 1), atau `null` jika tidak ditemukan.

---

## `left` / `LEFT` - Karakter Kiri

Mengambil sejumlah karakter dari sisi kiri string.

### Sintaks
```json
{"left": [text, num_chars]}
```

### Contoh
```json
{"left": ["Hello World", 5]}        // → "Hello"
```

---

## `right` / `RIGHT` - Karakter Kanan

Mengambil sejumlah karakter dari sisi kanan string.

### Sintaks
```json
{"right": [text, num_chars]}
```

### Contoh
```json
{"right": ["Hello World", 5]}       // → "World"
```

---

## `mid` / `MID` - Karakter Tengah

Mengambil sejumlah karakter dari tengah string (mengikuti gaya Excel).

### Sintaks
```json
{"mid": [text, start_num, num_chars]}
```

### Parameter
- **start_num**: Posisi mulai berbasis 1.

---

## `len` / `LEN` / `length` - Panjang String/Array

Mengembalikan panjang dari string, array, atau objek.

### Sintaks
```json
{"len": value}
{"length": value}
```

### Contoh
```json
{"len": "Hello"}                    // → 5
{"length": [1, 2, 3]}               // → 3
```

---

## `splittext` - Pisahkan dan Ambil Indeks

Memecah string berdasarkan pemisah dan mengembalikan elemen pada indeks tertentu (berbasis 0).

### Sintaks
```json
{"splittext": [text, separator, index]}
```

### Contoh
```json
{"splittext": ["a,b,c", ",", 1]}    // → "b"
```

---

## `splitvalue` - Pisahkan Menjadi Array

Memecah string menjadi sebuah array.

### Sintaks
```json
{"splitvalue": [string, separator]}
```

### Contoh
```json
{"splitvalue": ["a,b,c", ","]}      // → ["a", "b", "c"]
```

---

## `stringformat` - Format Angka ke String

Memformat angka menjadi string dengan pemisah ribuan, desimal, awalan, dan akhiran.

### Sintaks
```json
{"stringformat": [value, decimals, prefix, suffix, thousands_sep]}
```

### Contoh
```json
{"stringformat": [1234.567, 2, "$"]}   // → "$1,234.57"
{"stringformat": [75, 0, "", "%"]}      // → "75%"
```

---

## Troubleshooting

### Masalah: Search mengembalikan null padahal teks ada
Pastikan urutan parameter sudah benar: `[teks_yang_dicari, teks_sumber]`. `SEARCH` juga menggunakan indeks berbasis 1.

### Masalah: Cat menghasilkan string "null"
Gunakan `ifnull` untuk memberikan nilai default (seperti string kosong) jika suatu variabel bernilai null agar tidak muncul tulisan "null" di hasil penggabungan.

---

## Praktik Terbaik

1. **Gunakan cat untuk kejelasan** saat menggabungkan pesan dinamis.
2. **Gunakan splitvalue** untuk memproses data CSV atau list yang dipisahkan karakter tertentu.
3. **Format mata uang secara konsisten** menggunakan `stringformat` di satu tempat.
4. **Selalu cek panjang string** dengan `len` sebelum melakukan ekstraksi untuk menghindari error.