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

aveva lo scopo di soddisfare le condizioni di seguito in un controllo di nuovo la password basato su JavaScript,JavaScript RegExp in IE

  • deve contenere almeno 8 a 20 caratteri, obbligatoriamente tra cui una lettera e il numero
  • può includere solo uno dei seguenti caratteri speciali:?%, &, _,, #, =, -
  • non può contenere spazi

Con la regex precedente, goog123# corrisponde a FF3.5. Tuttavia questo non funziona in IE6. Qualcuno sa cosa è andato storto qui? È un problema di compatibilità?

JavaScript utilizzato per testare la corrispondenza

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

Se qualcosa non funziona su IE6, non c'è niente di sbagliato. –

+0

@Rubens Molto probabilmente l'affermazione più divertente e accurata che ho sentito da molto tempo – Chris

risposta

1

Questo è ciò che ho trovato con una certa vagliatura.

  1. Mentre si trova il conteggio inferiore per le occorrenze, il conteggio inizia dalla fine della prima corrispondenza di lookahead. Anche se, le partite finali saranno fatte solo dall'inizio della stringa.
  2. Per il conteggio superiore, il comportamento è come previsto.

L'espressione regolare finale di questo problema è

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

La regex ha un certo numero di questioni. Provate questo invece:

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

che è:

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

grazie a Tomalak per l'aiuto rapido. tuttavia, il problema rimane ancora. Come ho specificato in precedenza, sto usando regExp in javascript per fare il matching.Pasting lo script di prova qui 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; } avviso (fnIsPassword ("1231231")); // false avviso (fnIsPassword ("sdfa4gggggg")); // FF: true, false in IE6 alert (fnIsPassword ("goog1234 #")); // FF: true, false in IE6 e sì, IE6 è un dolore. – mays

+0

scusa per la formattazione. come avrai intuito, sono nuovo qui intorno. – mays

+0

Ho provato lo script di test in JScript su Windows XP (IE6 utilizza JScript 5.6) e restituisce correttamente 0 (= false) per il primo e -1 (= true) per gli altri due test. Puoi salvarlo in un file .js e provarlo da solo? – Tomalak