Regex, setiap karakter non-alfanumerik kecuali spasi putih atau titik dua

131

Bagaimana saya bisa melakukan ini di mana saja?

Pada dasarnya, saya mencoba mencocokkan semua jenis karakter lain-lain seperti ampersand, titik koma, tanda dolar, dll.

Ryan Ward
sumber
13
/[^a-zA-Z0-9\s\:]*/
Kelly

Jawaban:

246
[^a-zA-Z\d\s:]
  • \ d - kelas numerik
  • \ s - spasi putih
  • a-zA-Z - cocok dengan semua huruf
  • ^ - meniadakan semuanya - jadi Anda dapat - karakter non numerik, non spasi, dan non titik dua
Tudor Constantin
sumber
Itulah yang saya lihat juga :)) - Saya harus mempromosikan jawaban sempurna Anda
Tudor Constantin
6
Satu-satunya hal yang saya temukan adalah ini menghilangkan karakter khusus seperti é atau ã. Saya lebih suka [^ \ w \ d \ s:].
Eric Belair
5
Diturunkan karena ini tidak akan menangkap karakter non-Latin, atau karakter Latin "khusus".
Damian
\ddan \sekstensi Perl yang biasanya tidak didukung oleh alat-alat yang lebih tua seperti grep, sed, tr, lex, dll
tripleee
38

Ini harus dilakukan:

[^a-zA-Z\d\s:]
Luke Sneeringer
sumber
1
Sisanya baik memeriksa ruang tetapi tidak spasi atau memiliki negasi di tempat yang salah untuk benar-benar meniadakan.
Zachary Scott
\ w menangkap garis bawah juga - yang merupakan karakter non-alfanumerik
Tudor Constantin
Aha! Saya akan memodifikasi - saya tidak tahu itu. Saya berharap ini bekerja secara berbeda untuk mesin yang berbeda, tetapi mungkin juga memberikan OP jawaban yang aman.
Luke Sneeringer
2
Diturunkan karena ini tidak akan menangkap karakter non-Latin, atau karakter Latin "khusus".
Damian
16

Jika Anda ingin memperlakukan karakter latin beraksen (mis. À Ñ) sebagai huruf normal (mis. Hindari mencocokkannya juga), Anda juga harus menyertakan kisaran Unicode yang sesuai ( \ u00C0- \ u00FF ) di regex Anda, jadi akan terlihat seperti ini:

/[^a-zA-Z\d\s:\u00C0-\u00FF]/g
  • ^ meniadakan apa yang mengikuti
  • a-zA-Z cocok dengan huruf besar dan kecil
  • \d angka yang cocok
  • \s cocok dengan spasi putih (jika Anda hanya ingin mencocokkan spasi, gantilah dengan spasi)
  • : cocok dengan titik dua
  • \u00C0-\u00FF cocok dengan kisaran Unicode untuk karakter latin beraksen.

nb. Pencocokan rentang Unicode mungkin tidak berfungsi untuk semua mesin regex, tetapi yang di atas tentu berfungsi dalam Javascript (seperti yang terlihat dalam pena ini pada Codepen).

nb2. Jika Anda tidak peduli tentang pencocokan garis bawah, Anda bisa menggantinya a-zA-Z\ddengan \w, yang cocok dengan huruf, angka, dan garis bawah.

Nick F
sumber
Rentang ini berisi beberapa karakter yang bukan alfanumerik (U + 00D7 dan U + 00F7), dan mengecualikan banyak karakter beraksen yang valid dari bahasa non-Barat seperti Polandia, Ceko, Vietnam dll.
tripleee
1
Terpilih untuk deskripsi setiap bagian dari RegEx.
morajabi
14

Coba ini:

[^a-zA-Z0-9 :]

Contoh JavaScript:

"!@#$%* ABC def:123".replace(/[^a-zA-Z0-9 :]/g, ".")

Lihat contoh online:

http://jsfiddle.net/vhMy8/

Topera
sumber
3
Diturunkan karena ini tidak akan menangkap karakter non-Latin, atau karakter Latin "khusus".
Damian
14
Mudah untuk memilih jawaban, dan lebih sulit lagi untuk memberikan informasi yang konstruktif kepada dewan, misalnya bagaimana seseorang kemudian menangkap karakter non-Latin, atau karakter Latin "khusus"? Pada hitungan saya ke sini Anda telah memilih 3 jawaban untuk alasan yang sama, dan menurut pendapat saya untuk tweak yang agak kecil. Sebagai contoh, saya di sini untuk menemukan regex untuk apa yang dibahas dalam jawaban ini. Saya tidak peduli dengan set karakter yang tidak akan digunakan dalam aplikasi saya. Hukum pengembalian yang semakin berkurang.
Harun mungkin menjadi "minor tweak" untuk warga negara AS, tetapi sangat relevan untuk ... seluruh planet ini.
Michael K. Borregaard
4

Tidak ada alfanumerik, spasi putih atau '_'.

var reg = /[^\w\s)]|[_]/g;
Vasyl Gutnyk
sumber
4

Jika Anda bermaksud "karakter non-alfanumerik", coba gunakan ini:

var reg =/[^a-zA-Z0-9]/g      //[^abc]
Kim-Trinh
sumber
1

Regex ini berfungsi untuk C # , PCRE , dan Go beberapa nama.

Itu tidak berfungsi untuk JavaScript di Chrome dari apa yang dilakukan RegexBuddy dikatakan . Tapi sudah ada contoh untuk itu di sini.

Bagian utama dari ini adalah:

\p{L}

yang mewakili \p{L}atau \p{Letter}jenis surat apa pun dari bahasa apa pun.`


Regex lengkap itu sendiri: [^\w\d\s:\p{L}]

Contoh: https://regex101.com/r/K59PrA/2

Ste
sumber
Ini adalah satu-satunya jawaban di sini yang berurusan dengan benar dengan alfabet beraksen Unicode dengan cara yang tepat. Sayangnya, tidak semua mesin regex mendukung fasilitas ini (bahkan Python tidak memilikinya, mulai 3,8, meskipun mesin regexnya berbasiskan PCRE).
tripleee
1
Saya akan menghapus Python dari jawabannya, saya pikir saya mengujinya tetapi ternyata tidak. Terima kasih telah menunjukkannya.
Ste
0

Coba tambahkan ini:

^[^a-zA-Z\d\s:]*$

Ini bekerja untuk saya ... :)

Er Parthu
sumber
Ini tampaknya mengulangi jawaban yang diterima dari 2011. The ^dan $jangkar membatasi untuk mencocokkan seluruh garis dan *kuantifier berarti juga cocok dengan garis kosong.
tripleee
0

Dalam JavaScript:

/[^\w_]/g

^negasi, yaitu memilih apa pun yang tidak di set berikut

\w karakter kata apa saja (yaitu karakter alfanumerik apa pun, plus garis bawah)

_ meniadakan garis bawah, karena dianggap sebagai karakter 'kata'

Contoh penggunaan - const nonAlphaNumericChars = /[^\w_]/g;

Chris Halcrow
sumber