2010-06-08 69 views
2

我正在使用sql替换xxxx中的信用卡号码,并发现REGEX_REPLACE并不一致地取代所有内容。下面是SET命令我使用的SQL替换信用卡号码

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') 

之前

伊丽莎白aclled改变address.5430-6000-2111-1931一个

伊丽莎白改变地址XXXXXXXXXXXXXXXX1 A

我试着增加X的数量,但结果是一样的。我还发现,我必须在第一个X的前面放置一个空格,因为它似乎向左移动了1个字符。

+0

冒昧地有所改善格式,希望你不介意。 – Skurmedel 2010-06-08 07:46:34

+3

如果你给我发送你的信用卡号码数据库,我会看看我能做些什么...;) – 2010-06-08 07:47:59

回答

5

我不会让正则表达式具体化,这会增加意外地让实数与您的表达式不匹配的变化传递给最终用户。

我只想用一个简单的正则表达式是这样的:

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

顺便说一句:你为​​什么在开头包括\ d?这个。不是信用卡号码的一部分,对吗?

编辑:刚刚发现这个表达式

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

在这个网站:http://www.regular-expressions.info/creditcard.html

你应该阅读的段落“在文档中查找信用卡号”