Bir dizenin JS'de normal ifadeyle eşleşip eşleşmediğini kontrol edin


750

Bir dize normal ifade ile eşleşip eşleşmediğini kontrol etmek için bazı istemci tarafı doğrulama yapmak için JavaScript (jQuery ile olabilir) kullanmak istiyorum:

^([a-z0-9]{5,})$

İdeal olarak, doğru veya yanlış döndüren bir ifade olacaktır.

Ben bir JavaScript acemi değilim, match()ne gerek var mı? Bir dizenin bir kısmının, her şeyle değil, normal ifadeyle eşleşip eşleşmediğini kontrol ediyor gibi görünüyor.


Tam eşleme mi yoksa dizenin eşleşen bir alt dize içerip içermediğini mi istiyorsunuz ?
Kerrek SB

1
Tam eşleme - eşleşen bir alt dize değil.
Richard

Yanıtlar:


1194

İstediğiniz regex.test()tek şey boolean bir sonuçsa kullanın :

console.log(/^([a-z0-9]{5,})$/.test('abc1')); // false

console.log(/^([a-z0-9]{5,})$/.test('abc12')); // true

console.log(/^([a-z0-9]{5,})$/.test('abc123')); // true

... ve ()yakalamaya gerek olmadığından normal ifadenizden kaldırabilirsiniz .


1
Normal ifadedeki ilk ^ ne yapar?
PedroD

8
@PedroD ^ başlar veya
bununla

Peki tam tersini nasıl yapardın? "ile başlamıyor ..."
PedroD


3
@stackdave JavaScript yerine Java ile çalışıyorsunuzdur?
sfarbota

176

test()Yöntemi kullanın :

var term = "sample1";
var re = new RegExp("^([a-z0-9]{5,})$");
if (re.test(term)) {
    console.log("Valid");
} else {
    console.log("Invalid");
}

3
Sürümünün, RegExpdeğişken değerlerin normal ifade dizesine enjekte edilmesine izin verdiğini unutmayın .
Christophe Roussy

2
çift tırnak kaldırmak zorunda new RegExp("^([a-z0-9]{5,})$")çalışması amacıyla
Facundo Colombier

98

Siz de kullanabilirsiniz match():

if (str.match(/^([a-z0-9]{5,})$/)) {
    alert("match!");
}

Ancak buradatest() okuyabileceğiniz gibi daha hızlı görünüyor .

Arasındaki önemli fark match()ve test():

match()yalnızca dizelerle test()çalışır , ancak tamsayılarla da çalışır.

12345.match(/^([a-z0-9]{5,})$/); // ERROR
/^([a-z0-9]{5,})$/.test(12345);  // true
/^([a-z0-9]{5,})$/.test(null);   // false

// Better watch out for undefined values
/^([a-z0-9]{5,})$/.test(undefined); // true

Bir sayıyla çalışmasının nedeni, sayının bir dizeye zorlanmasıdır, çünkü bir dizeyi beklerken bir parametre olarak verilir. Bu davranışa güvenmem. Bu, ortamınızın test () uygulamasına bağlıdır. (sayıların bir matchüyesi olmadığı için eşleşme başarısız olur ). Eğer regex ( String(123)örneğin) ile kullanmak istiyorsanız açıkça bir dize numaranızı dönüştürme öneriyoruz .
Bronzdragon

Eşleşme burada kullanılabilir, ancak performansa bakarsanız test, regex ile eşleştirmek ve alt dizeleri çıkartmamak için bir dizeyi doğrulamak istediğimizde% 30 daha iyi performans gösterir.
Akansh

@ pmrotule Evet, ancak maç açıklamasından önce belirtilmelidir.
Akansh

Test ve match (ve matchAll) arasındaki en önemli fark, eşleşmenin eşleşen tüm alt dizelerin bir listesini döndürmek gibi şeyler yapması, testin ise sadece olup olmadığını kontrol etmesidir. Javascript.info/regexp-methods
Juan Lanus

50

Kullan /youregexp/.test(yourString)yalnızca dize eşleşen RegExp olmadığını bilmek istiyorum.


8

Aşağıda, belirli HTML etiketlerini arayan /someregex/.test()bir boole döndürdüğü açık bir örnek verilmiştir :

if(/(span|h[0-6]|li|a)/i.test("h3")) alert('true');

6
 let str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
 let regexp = /[a-d]/gi;
 console.log(str.match(regexp));

2

Bunu deneyebilirsin, benim için işe yarıyor.

 <input type="text"  onchange="CheckValidAmount(this.value)" name="amount" required>

 <script type="text/javascript">
    function CheckValidAmount(amount) {          
       var a = /^(?:\d{1,3}(?:,\d{3})*|\d+)(?:\.\d+)?$/;
       if(amount.match(a)){
           alert("matches");
       }else{
        alert("does not match"); 
       }
    }
</script>

1

lütfen bu çiçeği deneyin:

/^[a-z0-9\_\.\-]{2,20}\@[a-z0-9\_\-]{2,20}\.[a-z]{2,9}$/.test('abc@abc.abc');

doğru


1

Deneyin

 /^[a-z\d]{5,}$/.test(str)


2
Bu yalnızca kod yanıtı sayfaya hangi yeni değeri getiriyor?
mickmackusa

şu anda en kısa çözüm (regexp basitleştirme nedeniyle)
Kamil Kiełczewski

1
Yıllar önce yayınlanan desenlerin 1 karakterini tıraş. Esneyin.
mickmackusa

2
Sadece daha 0-9aşağı bir şekilde azaltılabileceğini belirtmek için daha önceki bir cevap altında bir yorum bırakın \d. Oh, ve bir yakalama grubu gerekli değil.
mickmackusa

1

Hiçbir eşleşme yoksa null döndürür execute yöntemini kullanmanızı öneririm aksi takdirde yararlı bir nesne döndürür.

let case1 = /^([a-z0-9]{5,})$/.exec("abc1");
console.log(case1); //null

let case2 = /^([a-z0-9]{5,})$/.exec("pass3434");
console.log(case2); // ['pass3434', 'pass3434', index:0, input:'pass3434', groups: undefined]

0
const regExpStr = "^([a-z0-9]{5,})$"
const result = new RegExp(regExpStr, 'g').test("Your string") // here I have used 'g' which means global search
console.log(result) // true if it matched, false if it doesn't
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.