Alfasayısal, kısa çizgi ve alt çizgi var ancak boşluksuz normal ifade JavaScript'i kontrol edin


92

Girdiyi normal bir ifadeyle karşılaştırmaya çalışıyorum.

Alan, yalnızca alfasayısal karakterlere, tirelere ve alt çizgilere izin vermeli ve boşluklara izin VERMEMELİDİR.

Ancak aşağıdaki kod boşluklara izin verir.

Neyi kaçırıyorum?

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

5
Andy E'nin aşağıdaki cevabını beğendim. Ayrıca, hızlı normal ifade düzenleme için gskinner.com/RegExr adresine göz atmak isteyebilirsiniz . Bu ... çok tatlı.
pixelbobby

Yanıtlar:


155

Ancak aşağıdaki kod boşluklara izin verir.

Hayır, öyle değil. Ancak, yalnızca 1 uzunluğundaki girişlerle eşleşecektir. 1'den büyük veya 1'e eşit uzunluktaki girişler için, +aşağıdaki karakter sınıfına ihtiyacınız vardır :

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

Ne -(bu örnekte) ne de _kaçma ihtiyacı olduğunu unutmayın.


16

Sen gerektiğini String.match kullanmayan ancak RegExp.prototype.test (yani /abc/.test("abcd")) yerine yalnızca bir boolean değer ilgilenen eğer String.search (). Ayrıca Andy E'nin yanıtında açıklandığı gibi karakter sınıfınızı tekrarlamanız gerekir:

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

8
Aslında, RegExp.prototype.testyalnızca bir boole ile ilgileniyorsanız , yöntemi kullanmalısınız .
Andy E

7

Bu sözdizimi, bu noktaya gönderilen yanıtlardan biraz daha özlüdür ve aynı sonucu elde eder:

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

1
Cevabınızın uluslararası karakterler için de işe yarayacağına dair bir not eklemeyi düşünün. JavaScript'ten emin değilim, ama bash'de bu çalışıyor: `echo" abc-def däf_ghi "| egrep -wo '(\ w | - | _) +'
Ivan Ogai

4

Aptalca bir hata aldım. Biri yararlı bulursa buraya gönderin

  1. -\._ - tire, nokta ve alt çizgi anlamına gelir
  2. \.-_ - noktadan alt çizgiye kadar tüm işaretler anlamına gelir

# 2 yalnızca köşeli parantez içindeyse geçerlidir, yani [\.-_], Noktadan alt çizgiye kadar olan aralıkta bir karakterdir. Ancak köşeli parantezler olmadan her ikisi de üç sembolden oluşan bir dizidir ve sıraları farklıdır.
2019

1

Alt çizgiden kaçmayın. Bazı felaketlere neden olabilir.


1
Neden öyle diyorsun? Ben çizgi olmadığını biliyoruz ihtiyaç kaçmış olması, ama ben duymadım \_JavaScript neden olduğu problemler, ya da başka düzenli ifade lezzet.
Alan Moore

1
Saf spekülasyon. İfade başka türlü güzel görünüyordu ve hiçbir durumda boşluklarla eşleşmemesi gerekiyordu, ama ben onu oraya attım. Muhtemelen cevap değil yorum olmalıydı.
David Fells


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.