2012-12-06 26 views
7

İlk önce argüman olarak gönderilen bir dizenin yalnızca harfleri olup olmadığını kontrol ettiğim bir işlev var. Ama her zaman yanlış olarak geri döner. Aşağıda benim jsfiddleKod ilk doğrulamayı geçmiyor

function takeString (str) { 
    var regex = "/^[A-Za-z]+$/"; 

    if (str.match(regex)) { 
     if (str.charCodeAt(0) === str.toUpperCase().charCodeAt(0)) { 
      alert('true'); 
      return true; 
     } 
     else { 
      alert('false'); 
      return false; 
     } 
    } 
    else { 
     alert('Only letters please.'); 
    } 
} 

takeString('string'); 

yukarıdaki kodu daima Only letters please uyarır.

cevap

9

Sen regex bir normal düz ifade yapmaya tırnak kurtulmak gerekir:

var regex = /^[A-Za-z]+$/; 

İşte bir updated fiddle bu.

Şu anda, regex bir dize değişmezini ifade eder. Eğer normal bir ifade nesne veya String#match için edebi olmayan bir şey geçtiğinizde, bu örtük (ES5 15.5.4.10 bakınız) Normal ifade nesnesine bu argümanı dönüştürür:

  • Tip (regexp'in) Nesne ve değer ise regexp'un [[Sınıf]] iç özelliğinin "RegExp" olduğunu, daha sonra rxregexp;
  • Else, rxRegExp yerleşik yapıcısı bu adla standarttır ifade new RegExp(regexp) tarafından sanki oluşturulan yeni RegExp nesne olsun.

nedenle (string eğik çizgi karakterleri içerdiğinden değişmeziyle normal bir ifade sınırlandırmak için bekliyorduk) böyle yorumlanır olan normal ifadeniz:

var regex = /\/^[A-Za-z]+$\//; 

şey maç olamaz, bir eğik çizgi aradığı için, ardından dizenin başlangıcı.

+1

Aynı şeyi göndermek üzereydik :) Normal ifadeyi daha da kısaltabilirsin: '/^[az] + $/g' –

+0

Bu gibi bir dize verdiğimde jsfiddle'ımın neden yanlış döndüğüne yardım edebilir misiniz? bir dize? Bu dizeleri de kabul etmesi için nasıl değiştirebilirim? Teşekkür ederiz – 2619

+0

@ x4f4r - Bu işe yaramıyor çünkü dizede boşluklar var ve normal ifadeniz sadece harflerle eşleşiyor. Sadece regex'e bir boşluk ekleyin ve o dizeyle çalışacaktır. –

İlgili konular