Alfanumerik, tanda hubung dan garis bawah tetapi tanpa spasi, ekspresi reguler memeriksa JavaScript


92

Mencoba memeriksa masukan terhadap ekspresi reguler.

Bidang hanya boleh mengizinkan karakter alfanumerik, tanda hubung dan garis bawah dan TIDAK boleh memberi spasi.

Namun, kode di bawah ini mengizinkan spasi.

Apa yang saya lewatkan?

var regexp = /^[a-zA-Z0-9\-\_]$/;
var check = "checkme";
if (check.search(regexp) == -1)
    { alert('invalid'); }
else
    { alert('valid'); }

5
Saya suka jawaban Andy E di bawah ini. Selain itu, Anda mungkin ingin membayar gskinner.com/RegExr untuk pengeditan regex cepat. Ini ... sangat manis.
pixelbobby

Jawaban:


155

Namun, kode di bawah ini mengizinkan spasi.

Tidak, tidak. Namun, itu hanya akan cocok pada input dengan panjang 1. Untuk input dengan panjang lebih dari atau sama dengan 1, Anda memerlukan +kelas karakter berikut:

var regexp = /^[a-zA-Z0-9-_]+$/;
var check = "checkme";
if (check.search(regexp) === -1)
    { alert('invalid'); }
else
    { alert('valid'); }

Perhatikan bahwa baik -(dalam hal ini) maupun _kebutuhan untuk melarikan diri.


16

Anda tidak boleh menggunakan String.match tetapi RegExp.prototype.test (yaitu /abc/.test("abcd")) sebagai ganti String.search () jika Anda hanya tertarik pada nilai boolean. Anda juga perlu mengulang kelas karakter Anda seperti yang dijelaskan dalam jawaban oleh Andy E:

var regexp = /^[a-zA-Z0-9-_]+$/;

8
Sebenarnya, Anda harus menggunakan RegExp.prototype.testmetode ini jika Anda hanya tertarik pada boolean.
Andy E

7

Sintaks ini sedikit lebih ringkas daripada jawaban yang telah diposting ke poin ini dan mencapai hasil yang sama:

let regex = /^[\w-]+$/;

1
Pertimbangkan untuk menambahkan catatan bahwa jawaban Anda juga berfungsi untuk karakter internasional. Saya tidak yakin dengan JavaScript, tetapi di bash ini berfungsi: `echo" abc-def däf_ghi "| egrep -wo '(\ w | - | _) +'
Ivan Ogai

4

Mendapat kesalahan bodoh. Jadi posting di sini, jika ada yang merasa berguna

  1. -\._ - Berarti tanda hubung, titik dan garis bawah
  2. \.-_ - berarti semua tanda dalam rentang dari titik hingga garis bawah

# 2 hanya berlaku jika itu dalam tanda kurung siku, yaitu [\.-_] Adalah karakter dalam rentang dari titik ke garis bawah. Tetapi tanpa tanda kurung siku, keduanya adalah urutan dari tiga simbol, dan mereka hanya berbeda dalam urutannya.
erupsi

1

Jangan lepas dari garis bawah. Mungkin menyebabkan kerusakan.


1
Mengapa kamu mengatakan itu? Saya tahu garis bawah tidak perlu di -escape, tetapi saya belum pernah mendengar tentang \_penyebab masalah, di JavaScript atau jenis regex lainnya.
Alan Moore

1
Spekulasi murni. Ekspresi tampak baik-baik saja jika tidak dan seharusnya tidak cocok dengan spasi dalam hal apapun, tapi saya hanya membuangnya di sana. Mungkin seharusnya ada komentar bukan jawaban.
David Fells


0

coba yang ini, ini berfungsi dengan baik untuk saya.

"^([a-zA-Z])[a-zA-Z0-9-_]*$"
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.