我正在使用sql用xxxx替换信用卡号,并发现REGEX_REPLACE并不能始终如一地替换所有内容。下面是我在SQL上使用的SET命令
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')
在
伊丽莎白请改变地址.5430-6000-2111-1931 A
在
伊丽莎白已更改地址XXXXXXXXXXXXXXXX1 A
我尝试增加X的数量,但结果是一样的。我还发现我必须在第一个X前放置一个空格,因为它似乎向左移动了1个字符。
答案 0 :(得分:5)
我不会使正则表达式具体化,这会增加意外地让与你的表达式不匹配的实数传递给最终用户的变化。
我只想使用这样一个简单的正则表达式:
(\d+-){3}\d+
顺便问一下:你为什么一开始就包含\ D?的。不是信用卡号码的一部分,对吗?
编辑:刚发现这个正则表达式
\b(?:\d[ -]*?){13,16}\b
在此网站:http://www.regular-expressions.info/creditcard.html
您应阅读“在文档中查找信用卡号”
段落