首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >mysql REGEXP精确模式匹配

mysql REGEXP精确模式匹配
EN

Stack Overflow用户
提问于 2018-09-27 13:08:17
回答 3查看 320关注 0票数 0

我正在编写一个php脚本,它将遍历数据库中的所有表,并查找纯文本信用卡号。为此,我使用MySQL REGEXP。我只需要那些“只”包含信用卡号码的结果。如果有任何包含信用卡号码的文本数据,那么脚本不应该考虑它。

例如:

商业、金融、商业、商业、金融、商业、商业等行业

/.=

/.=‘2’>

=

如果查询是在上面的表上进行三重排列的,那么它应该返回前3条记录,而不应该返回第4条记录。为此,我使用下面的查询,而我面临的问题是查询返回了所有4条记录。

代码语言:javascript
运行
复制
SELECT ccno FROM aacc WHERE 
(ccno = REGEXP '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
OR ccno = REGEXP '[0-9][0-9][0-9][0-9] [0-9][0-9][0-9][0-9] [0-9][0-9][0-9][0-9] [0-9][0-9][0-9][0-9]'
OR ccno = REGEXP '[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]')
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-09-27 13:17:08

已知有一些复杂的正则表达式可以匹配来自大型信用卡提供商(如Visa和MasterCard )的信用卡号码。就您的问题而言,下面的模式与您想要的非常接近:

代码语言:javascript
运行
复制
SELECT *
FROM yourTable
WHERE ccno REGEXP '^[0-9]{4}([[:space:]-]?[0-9]{4}){3}$';

演示

这个模式并不准确,但是您的数据没有一个匹配,例如,带有dddd-dddddd-ddddd格式的美国运通卡,有两个破折号,而不是三个。如果您计划使用生产数据进行此操作,则应研究如何将信用卡号码与regex匹配。

https://www.regular-expressions.info/creditcard.html

票数 2
EN

Stack Overflow用户

发布于 2018-09-27 13:11:40

尝试regex ^([0-9]{4}[-[:space:]]?){4}$

这将可选择地匹配由空格或连字符分隔的16个数字。

regex

票数 2
EN

Stack Overflow用户

发布于 2018-09-28 10:45:38

虽然上面的两个答案帮助我实现了我想要的结果,但我现在已经写了完整的查询,这将给出与纯文本信用卡完全匹配的内容。在此查询中工作正常的卡片如下:

美国运通

签证

MasterCard

发现

MySQL查询是:

代码语言:javascript
运行
复制
SELECT *
FROM yourTable
WHERE (ccno REGEXP '^4[0-9]{3}([[:space:]-]?[0-9]{4}){3}$'
       OR ccno REGEXP '^3[47][0-9]{2}[[:space:]-]?[0-9]{6}[[:space:]-]?[0-9]{5}$'
       OR ccno REGEXP '^6011([[:space:]-]?[0-9]{4}){3}$'
       OR ccno REGEXP '^65[0-9]{2}([[:space:]-]?[0-9]{4}){3}$'
       OR ccno REGEXP '^5[1-5][0-9]{2}([[:space:]-]?[0-9]{4}){3}$'
       OR ccno REGEXP '^222[1-9]([[:space:]-]?[0-9]{4}){3}$'
       OR ccno REGEXP '^2[3-6][0-9]{2}([[:space:]-]?[0-9]{4}){3}$'
       OR ccno REGEXP '^27[01][0-9]([[:space:]-]?[0-9]{4}){3}$'
       OR ccno REGEXP '^2720([[:space:]-]?[0-9]{4}){3}$'
       );

工作示例可以看到这里

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52537762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档