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'); }
Tom
sumber
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.

Andy E
sumber
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-_]+$/;
sapht
sumber
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-]+$/;
Grant Humphries
sumber
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
Ivan Ivanov
sumber
# 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.

David Fells
sumber
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
1

Coba ini

"[A-Za-z0-9_-]+"

Harus mengizinkan garis bawah dan tanda hubung

Akash Yellappa
sumber
Solusi Anda membantu saya. Terima kasih!
Pangeran Saiyan
0

coba yang ini, ini berfungsi dengan baik untuk saya.

"^([a-zA-Z])[a-zA-Z0-9-_]*$"
Santosh Shinde
sumber