Saya perlu menghapus semua karakter dari string yang tidak a-z A-Z 0-9
diatur atau bukan spasi.
Apakah ada yang punya fungsi untuk melakukan ini?
Sepertinya Anda hampir tahu apa yang ingin Anda lakukan, pada dasarnya Anda mendefinisikannya sebagai regex.
preg_replace("/[^A-Za-z0-9 ]/", '', $string);
preg_replace('/[^A-Za-z0-9 ]/', '', $string);
Untuk karakter unicode, itu adalah:
sumber
\w
sertakan\d
dan karenanya\d
tidak perlu. Juga, ini salah karena juga akan meninggalkan garis bawah pada string yang dihasilkan (yang juga termasuk dalam\w
).i
bendera benar-benar diperlukan di sini karena[:alnum:]
sudah mencakup kedua kasus?Ekspresi reguler adalah jawaban Anda.
i
singkatan kasus sensitif.^
berarti, tidak dimulai dengan.\d
cocok dengan angka apa pun.a-z
cocok dengan semua karakter antaraa
danz
. Karenai
parameter Anda tidak perlu menentukana-z
danA-Z
.\d
ada spasi, maka spasi diizinkan di regex ini.sumber
inilah regex yang sangat sederhana untuk itu:
dan digunakan sesuai kebutuhan (dengan
/
pembatas slash maju ).Uji di sini dengan alat hebat ini yang menjelaskan apa yang dilakukan regex:
http://www.regexr.com/
sumber
/u
bendera jika tidak, huruf non-ascii juga dihapus.[\W_]+
Jika Anda perlu mendukung bahasa lain, alih-alih AZ biasa, Anda dapat menggunakan yang berikut:
[^\p{L}\p{N} ]
mendefinisikan negated (Ini akan cocok dengan karakter yang tidak didefinisikan) kelas karakter dari:\p{L}
: surat dari bahasa apa pun .\p{N}
: karakter numerik dalam skrip apa pun .: karakter spasi.
+
rakus cocok dengan kelas karakter antara 1 dan kali tidak terbatas .Ini akan mempertahankan huruf dan angka dari bahasa dan skrip lain serta AZ:
Catatan: Ini adalah pertanyaan yang sangat lama, namun masih relevan. Saya menjawab murni untuk memberikan informasi tambahan yang mungkin berguna bagi pengunjung masa depan.
sumber
Itu memilih semua bukan AZ, az, 0-9 dan menghapusnya.
Lihat contoh di sini: https://regexr.com/3h1rj
sumber
\W
adalah kebalikan dari\w
karakterA-Za-z0-9_
. Jadi\W
akan cocok dengan karakter apa pun yang bukanA-Za-z0-9_
dan menghapusnya. Ini[]
adalah batas karakter yang ditetapkan . Ini+
berlebihan pada batas karakter yang ditetapkan tetapi biasanya berarti 1 atau lebih karakter. Theu
bendera memperluas ekspresi untuk menyertakan dukungan karakter unicode, yang berarti tidak akan menghapus karakter di luar karakter kode 255 sepertiª²³µ
. Contoh berbagai penggunaan 3v4l.org/hSVV5 dengan karakter unicode dan ascii.Anda dapat mengujinya di sini: http://regexr.com/
sumber
Saya juga mencari jawabannya dan niat saya adalah untuk membersihkan setiap non-alpha dan seharusnya tidak ada lebih dari satu ruang.
Jadi, saya mengubah jawaban Alex untuk ini, dan ini berfungsi untuk saya
preg_replace('/[^a-z|\s+]+/i', ' ', $name)
. Regex di atas beralih
sy8ed sirajul7_islam
kesy ed sirajul islam
Penjelasan: regex akan memeriksa TIDAK SETIAP dari a ke z jika tidak sensitif atau lebih dari satu spasi, dan akan dikonversi menjadi satu ruang.
sumber
Anda dapat membagi string menjadi karakter dan memfilternya.
sumber
preg_replace()
.