2015-04-21 12 views

risposta

111

perché la vostra classe di caratteri [A-z] partite questo simbolo.

[A-z] partite [, \, ], ^, _, `, e le lettere inglesi.

In realtà, si tratta di un errore comune. Dovresti utilizzare [a-zA-Z] invece di consentire solo lettere inglesi.

Ecco una visualizzazione da Expresso, mostrando ciò che la gamma [A-z] copre in realtà:

screenshot from Expresso showing the ASCII table, where you can see what the [A-z] range actually covers

Quindi, this regex (con i opzionale) non cattura la stringa.

^(?=.*[0-9])(?=.*[a-z])[0-9a-z-]{17}$ 

A mio parere, è sempre più sicuro di usare Ignorecase opzione per evitare tale problema e accorciare la regex.

5

Si sta consentendo A-z (maiuscola 'A' attraverso la 'z' inferiore). Non si dice quale pacchetto regex si sta utilizzando, ma non è necessariamente chiaro che A-Z e a-z sono contigui; ci potrebbero essere altri personaggi in mezzo. Prova questo:

^(?=.*[0-9])(?=.*[A-Za-z])[0-9A-Za-z-]{17}$ 

Sembra soddisfare i tuoi criteri per me in regexpal.

15

regex utilizza caratteri stampabili ASCII dallo spazio all'intervallo di tilde.

Ogni volta che utilizziamo il token [A-z] corrisponde ai seguenti caratteri evidenziati nella tabella. Se utilizziamo il token [ -~] corrisponde a partire da SPACE a tilde.

enter image description here

Problemi correlati