tl; dr
Cukup tambahkan spasi di kelas karakter Anda .
^[a-zA-Z0-9_ ]*$
Sekarang, jika Anda ingin menjadi ketat ...
Di atas tidak sepenuhnya benar. Karena kenyataan itu *
berarti nol atau lebih , itu akan cocok dengan semua kasus berikut yang biasanya tidak cocok dengan orang:
- String kosong, "".
- String seluruhnya terdiri dari spasi, "".
- String yang mengarah dan / atau mengikuti spasi, "Hello World".
- String yang berisi beberapa spasi di antara kata-kata, "Hello World".
Awalnya saya tidak berpikir perincian seperti itu layak untuk dibahas, karena OP mengajukan pertanyaan mendasar sedemikian rupa sehingga kelihatannya tidak ketat. Sekarang pertanyaannya mendapatkan popularitas namun, saya ingin mengatakan ...
Yang, menurut selera saya (tanpa menggunakan \w
) diterjemahkan menjadi:
^[a-zA-Z0-9_]+( [a-zA-Z0-9_]+)*$
(Harap pilih @stema tanpa memperhatikan.)
Beberapa hal yang perlu diperhatikan tentang jawaban ini (dan @ stema):
Jika Anda ingin mengizinkan beberapa spasi di antara kata-kata (katakanlah, jika Anda ingin mengizinkan spasi ganda yang tidak disengaja, atau jika Anda bekerja dengan teks yang disalin dari PDF), maka tambahkan a +
setelah spasi:
^\w+( +\w+)*$
Jika Anda ingin membolehkan tab dan baris baru (karakter spasi putih), maka ganti spasi dengan \s+
:
^\w+(\s+\w+)*$
Di sini saya menyarankan +
secara default karena, misalnya, Windows linebreak terdiri dari dua karakter spasi putih secara berurutan \r\n
, sehingga Anda perlu +
menangkap keduanya.
Masih tidak bekerja?
Periksa dialek ekspresi reguler apa yang Anda gunakan. * Dalam bahasa seperti Java Anda harus melarikan diri dari garis miring terbalik, yaitu \\w
dan \\s
. Dalam bahasa dan utilitas yang lebih tua atau lebih dasar, seperti sed
, \w
dan \s
tidak didefinisikan, maka tuliskan masing-masing dengan kelas karakter, misalnya [a-zA-Z0-9_]
dan [\f\n\p\r\t]
, masing-masing.
* Saya tahu pertanyaan ini ditandaivb.net, tetapi berdasarkan 25.000+ tampilan, saya kira bukan hanya orang-orang yang menemukan pertanyaan ini. Saat ini adalah hit pertama di google untuk frasa pencarian, kata ruang ekspresi reguler .