2010-06-08 5 views
2

J'utilise un sql pour remplacer les numéros de carte de crédit avec xxxx et je trouve que REGEX_REPLACE ne remplace pas systématiquement tout. Ci-dessous la commande SET j'utilise sur le SQLRemplacement des numéros de carte de crédit

SET COMMENTS_LONG = 
    REGEXP_REPLACE (COMMENTS_LONG,'\D[1-6]\d{3}.\d{4}.\d{4}.\d{3}(\d{1}.\d{3})?|\D[1-6]\d{12,15}|\D[1-6]\d{3}.\d{3}.?\d{3}.\d{5}', ' XXXXXXXXXXXXXXXX') 

Avant

Elizabeth aclled changer address.5430-6000-2111-1931 A

Après

Elizabeth a changé d'adresse XXXXXXXXXXXXXXXX1 A

J'ai essayé d'augmenter le nombre de X mais le résultat est le même. Je trouve aussi que je dois mettre un espace devant le premier X car il semble déplacer 1 caractère vers la gauche.

+0

A pris la liberté d'améliorer la mise en forme un peu J'espère que cela ne vous dérange pas. – Skurmedel

+3

Si vous envoyez moi votre base de données de numéros de cartes de crédit, je vais voir ce que je peux faire ...;) –

Répondre

5

Je ne ferais pas l'expression régulière spécifique, qui augmente le changement de laisser accidentiellement les nombres réels qui ne correspondent pas à votre expression passer à l'utilisateur final.

Je voudrais simplement utiliser un simple regex comme ceci:

(\d+-){3}\d+ 

BTW: pourquoi avez-vous inclus \ D au début? Le . ne fait pas partie du numéro de carte de crédit, non?

Edit: Juste trouvé cette regex

\b(?:\d[ -]*?){13,16}\b 

sur ce site: http://www.regular-expressions.info/creditcard.html

Vous devriez lire le paragraphe "Trouver des numéros de carte de crédit dans les documents"

Questions connexes