Regex in jQuery Validation: problema con virgolette singole in jQuery

Ho un’espressione regolare per convalidare una password per contenere numeri, caratteri minuscoli e maiuscoli.

Quello sotto funziona bene. Ma quando lo uso in jQuery Validation:

txtPassword: { required: true, regex: Regex } Regex = (?=^.{8,16}$)(?=.*\d)(?=.*[az])(?=.*[AZ])(?=.*[[email protected]#$%^&*()_+}{":;/'?/>.<,])(?!.*\s).*$ 

Ma il problema è la citazione singola ' in Javascript. Qualche corpo può aiutarmi a risolvere questo problema? Grazie.

Ci sono molte cose che devono essere corrette in questa espressione regolare:

  • Nel tuo lookahead verifica la password, hai un periodo senza quantificatore. Quindi fallirà sempre quel controllo. Ad esempio, per il controllo del numero, dovresti avere (?=.*\d) invece di (?=.\d) .
  • Non si sfuggono i caratteri con una barra in avanti, invece si usa una barra rovesciata \ . Hai fuggito in modo errato con un forwardslash nell’ultima class di caratteri.
  • Gli unici caratteri speciali o metacaratteri all’interno di una class di caratteri sono la parentesi di chiusura ( ] ), la barra retroversa ( \ ), il segno di omissione ( ^ ) e il trattino ( - ). Quindi non è dovuto alla singola citazione. Il colpevole è il tuo caret che non è sfuggito.

Prova questa regex in cui il cursore ^ è sfuggito al posto della frase ' :

 (?=^.{8,16}$)(?=.*\d)(?=.*[az])(?=.*[AZ])(?=.*[[email protected]#$%\^&*()_+}{":;'?/>.<,])(?!.*\s)^.*$ 

Sto assumendo dalla tua domanda, intendevi un Regexp per convalidare una password con:

  • almeno un numero
  • almeno 1 carattere di bassa temperatura
  • almeno 1 carattere maiuscolo
  • almeno 1 carattere speciale fuori dal set [email protected]#$%^&*()_+}{":;'?/>.<,
  • lunghezza tra 8 e 16 caratteri

Se questo è vero, ti preghiamo di aggiornare la tua domanda con il requisito chiarito.


Gioca con la regex in RegexPal


codice basato su jQuery. Fiddle con questo qui :

 var regex = /(?=^.{8,16}$)(?=.*\d)(?=.*[az])(?=.*[AZ])(?=.*[[email protected]#$%\^&*()_+}{":;'?/>.<,])(?!.*\s)^.*$/g; //if(regex.test($('#txtPassword').val())){ alert('Match'); }else{alert('No Match')} if (regex.test('[email protected]')) { alert('Match'); } else { alert('No Match'); }​