Oracle
 sql >> Database >  >> RDS >> Oracle

Come sostituire lookahead in regex?

Ci sono due approcci. Uno consiste nel comporre un'unica espressione che gestisca tutte le possibili alternative:

^[a-zA-Z][0-9][a-zA-Z0-9-,._;:]{6,}$
  |
^[a-zA-Z][a-zA-Z0-9-,._;:][0-9][a-zA-Z0-9-,._;:]{5,}$
  |
^[a-zA-Z][a-zA-Z0-9-,._;:]{2}[0-9][a-zA-Z0-9-,._;:]{4,}$

ecc. Questo è un incubo combinatorio, ma funzionerebbe.

Un approccio molto più semplice consiste nel convalidare la stessa stringa due volte utilizzando due espressioni:

^[a-zA-Z0-9-,._;:]{8,}$          # check length and permitted characters

e

[a-zA-Z].*[0-9]|[0-9].*[a-zA-Z]  # check required characters

EDIT:@briandfoy sottolinea correttamente che sarà più efficiente cercare separatamente ogni carattere richiesto:

[a-zA-Z]                         # check for required alpha

e

[0-9]                            # check for required digit