【问题标题】:Replacing Credit Card Numbers更换信用卡号码
【发布时间】:2010-06-08 16:33:30
【问题描述】:

我正在使用 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 个字符。

【问题讨论】:

  • 冒昧地对格式进行了一些改进,希望您不要介意。
  • 如果您将您的信用卡号码数据库通过电子邮件发送给我,我会看看我能做什么...... ;)

标签: regex


【解决方案1】:

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

我会像这样使用一个简单的正则表达式:

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

顺便说一句:你为​​什么在开头包含 \D ?这 。不是信用卡号的一部分,对吧?

编辑:刚刚找到这个正则表达式

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

在本站:http://www.regular-expressions.info/creditcard.html

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

【讨论】:

    猜你喜欢
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 2014-08-05
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    相关资源
    最近更新 更多