5
^(?=[\w\-%&?#=]+\d)(?=[\w\-%&?#=]+[a-zA-Z])[\w\-%&?#=]{8,12}$ 

JavaScript RegExp uyumluluğu

  • zorunlu bir harf ve sayı
  • dahil en az 8 ila 20 karakter içermelidir, bir JavaScript tabanlı yeni şifre kontrol altında aşağıda koşullarına uyacak şekilde geliyordu oldu ? sadece aşağıdaki özel karakterlerden birini içerebilir:% &, _,, #, =, -
  • herhangi boşluk olamaz

Yukarıdaki regex ile, goog123# FF3.5'te eşleştirilmiştir. Ancak bu IE6'da başarısız oluyor. Burada neyin yanlış olduğunu bilen var mı? Bu bir uyumluluk sorunu mu?

JavaScript düzenli ifade sorunların bir numarası vardır eşleşen

function fnIsPassword(strInput) 
{ 
    alert("strInput : " + strInput); 
    var regExp =/^(?=.{0,19}\d)(?=.{0,19}[a-zA-Z])[\w%&?#=-]{8,20}$/; 
    if(strInput.length > 0){ 
    return (regExp.test(strInput)); 
    } 
    return false; 
} 
alert(fnIsPassword("1231231")); //false 
alert(fnIsPassword("sdfa4gggggg")); //FF: true, false in IE 
alert(fnIsPassword("goog1234#")); //FF: true , false in IE 
+12

olduğunu. –

+0

@Rubens Muhtemelen en çok duyduğum en komik ve doğru ifadeyi – Chris

cevap

1

Bu şimdiye bazı eleme ile gördük yerine bunu deneyin.

  1. Olayların daha düşük sayısını bulurken, sayma ilk göz atma eşleşmesinin sonundan başlar. Bununla birlikte, final maçları sadece dizgenin başlangıcından yapılacaktır.
  2. Üst sayım için davranış beklendiği gibi. şey IE6 başarısız olursa

Bu sorunla ilgili nihai regex yanlış bir şey yok,

/(?=^[\w%&?#=-]{8,12}$)(?=.+\d)(?=.+[a-zA-Z]).+/ 
4

test etmek için kullanılır. olduğu

 
^(?=.{,19}\d)(?=.{,19}[a-zA-Z])[\w%&?#=-]{8,20}$ 

:

 
^     # start-of-string 
(?=.{,19}\d)   # look-ahead: a digit within 20 chars 
(?=.{,19}[a-zA-Z]) # look-ahead: a letter within 20 chars 
[\w%&?#=-]{8,20}  # 8 to 20 chars of your allowed range 
$     # end-of-string 
+0

duydum, hızlı yardım için tomalak teşekkürler. Bununla birlikte, sorun hala devam etmektedir. Daha önce belirttiğim gibi, eşleşmeyi yapmak için javascript içinde regExp kullanıyorum. Test komutumun buraya yazılması function fnIsPassword (strInput) { alert ("strInput:" + strInput); var regExp =/^ (? =. {0,19} \ d) (? =. {0,19} [a-zA-Z]) [\ w% &? # = -] {8,20} $ /; (strInput.length> 0) { dönüşü (regExp.test (strInput)); } false; } alert (fnIsPassword ("1231231")); // false alert (fnIsPassword ("sdfa4gggggg")); // FF: true, IE6 uyarısında yanlış (fnIsPassword ("goog1234 #")); // FF: true, IE6 'da yanlış ve evet, IE6 bir acıdır. Biçimlendirme için – mays

+0

özür dilerim. Tahmin edebileceğiniz gibi, buralarda yeniyim. – mays

+0

Test komut dosyanızı Windows XP'de JScript'te denedim (IE6, JScript 5.6'yı kullanır) ve ilk iki için 0 (= false) değerini ve diğer iki sınama için de -1 (= true) değerini döndürür. Bir .js dosyasına kaydedebilir ve kendi başına deneyebilir misiniz? – Tomalak