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

war es, die unter Bedingungen in einem JavaScript-basierten neuen Passwortprüfung übereinstimmen gemeint,JavaScript RegExp Kompatibilität in IE

  • Muss mindestens 8 bis 20 Zeichen enthalten, zwingend mit einer Buchstaben- und Zahlen
  • nur eines der folgenden Sonderzeichen können sein:?%, &, _,, #, =, -
  • darf keine Leerzeichen haben

Mit obigen Regex wurde goog123# in FF3.5 abgestimmt. Dies schlägt jedoch in IE6 fehl. Weiß jemand, was hier schief gelaufen ist? Ist das ein Kompatibilitätsproblem?

JavaScript verwendet, um die passenden

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

Wenn etwas auf IE6 ausfällt, es ist nichts falsch. –

+0

@Rubens Vielleicht die lustigste und genaueste Aussage, die ich seit langer Zeit gehört habe – Chris

Antwort

1

Das ist, was ich mit einigen Siebung gefunden.

  1. Während die niedrigere Anzahl für Vorkommen gefunden wird, beginnt die Zählung am Ende der ersten Vorausschauübereinstimmung. Die letzten Matches werden jedoch erst ab dem Beginn der Saite gemacht.
  2. Für die obere Anzahl ist das Verhalten wie erwartet.

Die endgültige regex für dieses Problem ist

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

Die Regex eine Reihe von Fragen zu prüfen haben. Versuchen Sie dieses stattdessen:

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

das ist:

 
^     # 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

Danke Tomalak für die schnelle Hilfe. jedoch bleibt das Problem bestehen. Wie ich zuvor angegeben hatte, verwende ich regExp in Javascript, um das Matching.Pasting mein Testskript hier Funktion 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)); } Rückgabe false; } Warnung (fnIsPassword ("1231231")); // false alert (fnIsPassword ("sdfa4ggggg")); // FF: true, false in IE6 Warnung (fnIsPassword ("goog1234 #")); // FF: true, false in IE6 und ja, IE6 ist ein Schmerz. – mays

+0

Entschuldigung für die Formatierung. Wie du vielleicht vermutet hast, bin ich hier neu. – mays

+0

Ich habe Ihr Testskript in JScript unter Windows XP (IE6 verwendet JScript 5.6) ausprobiert und es gibt 0 (= false) für die erste und -1 (= true) für die beiden anderen Tests korrekt zurück. Können Sie es in einer .js-Datei speichern und selbst ausprobieren? – Tomalak