我正在使用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')
Run Code Online (Sandbox Code Playgroud)
之前
伊丽莎白请改变地址.5430-6000-2111-1931 A.
后
伊丽莎白帮忙改变地址XXXXXXXXXXXXXXXX1 A.
我尝试增加X的数量,但结果是一样的.我还发现我必须在第一个X前面放一个空格,因为它似乎向左移动1个字符.
我不会使正则表达式具体化,这会增加意外地让与您的表达式不匹配的实数传递给最终用户的更改.
我只想使用这样的简单正则表达式:
(\d+-){3}\d+
Run Code Online (Sandbox Code Playgroud)
顺便说一下:你为什么一开始就包含\ D?的.不是信用卡号码的一部分,对吧?
编辑:刚发现这个正则表达式
\b(?:\d[ -]*?){13,16}\b
Run Code Online (Sandbox Code Playgroud)
在这个网站:http://www.regular-expressions.info/creditcard.html
您应该阅读"在文档中查找信用卡号"这一段