Menu

PHP trim(): Menghapus Spasi di Awal dan Akhir String

trim($string) menghapus spasi, tab, dan baris baru dari kedua ujung string; ltrim() dan rtrim() membersihkan satu sisi saja. Pelajari cara men-trim karakter tertentu, spasi lebar penuh Jepang, dan setiap nilai di sebuah array.

Halaman ini dilengkapi editor yang bisa dijalankan. Edit, jalankan, dan lihat output-nya seketika.

trim($string) mengembalikan string yang whitespace-nya sudah dihapus dari awal dan akhir: spasi, tab, baris baru, carriage return, byte NUL, dan tab vertikal. ltrim() hanya menghapusnya dari awal dan rtrim() hanya dari akhir. Spasi di tengah tetap dipertahankan.

Output var_dump() menampilkan panjang setiap hasil, sehingga karakter yang dihapus jadi terlihat. Men-trim adalah hal pertama yang dilakukan pada kebanyakan nilai dari formulir (password adalah pengecualiannya, lihat akhir halaman): pengguna yang mengetik ada@example.com dengan spasi di akhir tetap harus bisa login.

Sintaks

trim(string $string, string $characters = " \n\r\t\v\0"): string
ltrim(string $string, string $characters = " \n\r\t\v\0"): string
rtrim(string $string, string $characters = " \n\r\t\v\0"): string

trim() mengembalikan string baru; variabel yang kamu berikan tidak diubah.

Men-trim karakter tertentu

Argumen kedua menggantikan daftar default. Setiap karakter di dalamnya dihapus dari kedua ujung, dalam urutan apa pun dan berapa kali pun. .. mendefinisikan rentang, jadi 'a..z' berarti setiap huruf kecil.

Supaya whitespace biasa juga tetap dihapus, sertakan ke dalam daftarnya: trim($s, " \n\r\t\v\0/").

Argumen kedua adalah kumpulan karakter, bukan string

trim() tidak menghapus sebuah kata atau akhiran. Fungsi ini menghapus karakter mana pun yang ada di daftarmu, dari kedua ujung, sampai bertemu karakter yang tidak ada di daftar. Ini mengejutkan orang yang mencoba membuang ekstensi file:

Baris pertama juga menghapus h di awal, karena h ada di dalam kumpulan itu. Untuk menghapus awalan atau akhiran yang tetap, pakai str_starts_with() atau str_ends_with() dengan substr(), atau str_replace() kalau teks itu tidak mungkin muncul di tempat lain.

Men-trim spasi lebar penuh (input berbahasa Jepang)

Keyboard Jepang sering menghasilkan spasi ideografis   (U+3000), misalnya di sekitar nama yang diketik ke formulir. Spasi ini tidak ada di daftar default trim, dan menuliskannya di argumen kedua adalah jebakan: trim() bekerja byte demi byte, spasi itu terdiri dari 3 byte E3 80 80, dan E3 juga merupakan byte pertama dari setiap karakter hiragana dan katakana, jadi nama yang diawali salah satunya akan kehilangan byte pertama karakter itu. Pakai regular expression dengan modifier u:

\A dan \z menandai awal dan akhir string. Dengan modifier u, \s cocok dengan setiap spasi Unicode: whitespace ASCII, spasi lebar penuh, dan non-breaking space (U+00A0) yang sering ikut terbawa saat menyalin dari halaman web. Tanpa u, \s hanya cocok dengan whitespace ASCII dan spasi lebar penuh tetap tertinggal. PHP 8.4 menambahkan mb_trim(), mb_ltrim(), dan mb_rtrim() untuk keperluan ini; di PHP 8.3 dan versi sebelumnya, regex adalah caranya.

Men-trim setiap nilai di sebuah array

array_map('trim', $array) men-trim setiap nilai dan mempertahankan key-nya. Kasus yang umum adalah daftar yang dipisahkan koma dari sebuah kolom teks, yang dipecah dengan explode():

Men-trim nilai formulir sebelum memvalidasinya

Trim dulu, lalu periksa apakah hasilnya string kosong. Dengan begitu, kolom yang hanya berisi spasi ditolak sebagai kosong. Jalankan blok ini, ketik nama dengan spasi di sekitarnya ke dalam formulir, lalu tekan Send: script yang sama berjalan lagi dengan $_POST yang sudah terisi.

Jangan men-trim password: spasi di akhir password adalah bagian dari password itu.

Pertanyaan yang sering diajukan

Apa saja yang dihapus trim() di PHP?

Secara default, dari kedua ujung string: spasi, tab (\t), baris baru (\n), carriage return (\r), byte NUL (\0), dan tab vertikal (\v). Fungsi ini tidak pernah menyentuh bagian tengah string.

Apa bedanya trim, ltrim, dan rtrim?

trim() membersihkan kedua ujung, ltrim() hanya bagian awal, dan rtrim() hanya bagian akhir. Ketiganya menerima daftar karakter opsional yang sama untuk dihapus.

Kenapa trim() tidak menghapus spasi lebar penuh Jepang?

Spasi lebar penuh (U+3000) tidak ada di daftar default trim dan memakai 3 byte di UTF-8. Pakai preg_replace('/\A\s+|\s+\z/u', '', $s): dengan modifier u, \s cocok dengan setiap spasi Unicode, termasuk U+3000. PHP 8.4 menambahkan mb_trim(), yang juga menghapusnya.

Bagaimana cara menghapus koma terakhir dari string di PHP?

rtrim($s, ',') menghapus setiap koma di akhir. Kalau mungkin ada spasi setelahnya, sertakan juga spasinya: rtrim($s, ', ').

Bagaimana cara men-trim setiap nilai di sebuah array?

array_map('trim', $array) mengembalikan array baru yang setiap nilainya sudah di-trim, dengan key yang tetap. Untuk array bersarang, pakai array_walk_recursive() dengan reference.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai